按连续分组统计Balance起止值的SQL实现求助
按Balance连续分组统计起始/结束值的解决方案
假设你的数据表包含用于排序的字段(比如自增ID或交易时间)和Balance字段,以下是无需普通GROUP BY即可实现连续分组统计的方案:
1. 生成连续分组标识
利用窗口函数的差值来标记连续相同Balance的分组:
SELECT 排序字段名, Balance, ROW_NUMBER() OVER (ORDER BY 排序字段名) - ROW_NUMBER() OVER (PARTITION BY Balance ORDER BY 排序字段名) AS group_id FROM 你的表名
这里的group_id会为每一段连续相同的Balance分配唯一标识,不同连续段的group_id不同。
2. 聚合获取起始/结束值
基于生成的分组标识,聚合得到每组的起始和结束值:
WITH grouped_data AS ( SELECT 排序字段名, Balance, ROW_NUMBER() OVER (ORDER BY 排序字段名) - ROW_NUMBER() OVER (PARTITION BY Balance ORDER BY 排序字段名) AS group_id FROM 你的表名 ) SELECT Balance, MIN(排序字段名) AS 起始值, MAX(排序字段名) AS 结束值 FROM grouped_data GROUP BY group_id, Balance ORDER BY 起始值;
说明
- 把代码中的
排序字段名替换成你表中用于确定顺序的字段(比如ID、transaction_time),确保分组是按业务顺序的连续相同Balance段。 - 该方法通过窗口函数差值识别连续分组,避免了普通GROUP BY将所有相同
Balance合并为一组的问题,完全匹配你需要的连续分组统计需求。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

