SQL累计求和时如何去除MonthYear列的重复行?
解决MonthYear重复行问题
你的查询之所以会出现重复的MonthYear行,是因为原表中每个月份对应多条Solution条目记录,而窗口函数计算出的running_total在同一个月份里是完全相同的。要实现每个月份只显示一行,可以通过以下两种方式处理:
方法一:直接添加DISTINCT去重
这是最简单的方案,利用DISTINCT过滤掉完全重复的行(同一个MonthYear对应的running_total值一致):
SELECT DISTINCT CAST(TO_CHAR(FirstApprovalDate, 'YYYYMM') AS Int) AS MonthYear, COUNT(DISTINCT name) OVER (ORDER BY CAST(TO_CHAR(FirstApprovalDate, 'YYYYMM') AS Int) ASC) AS running_total FROM MP_Data.Solution WHERE Published = 1 AND Hub <> 'pd' ORDER BY MonthYear DESC
方法二:先去重月份与名称组合(更严谨)
如果原表中存在同一个name在同一个月份有多条审批记录的情况,先对MonthYear和name做去重处理,再计算累计总数,能避免重复统计同一名称,结果更准确:
WITH monthly_unique_names AS ( -- 提取每个月份下的唯一名称 SELECT DISTINCT CAST(TO_CHAR(FirstApprovalDate, 'YYYYMM') AS Int) AS MonthYear, name FROM MP_Data.Solution WHERE Published = 1 AND Hub <> 'pd' ) SELECT MonthYear, COUNT(DISTINCT name) OVER (ORDER BY MonthYear ASC) AS running_total FROM monthly_unique_names GROUP BY MonthYear ORDER BY MonthYear DESC
执行上述任意一种查询后,输出会简化为每个MonthYear仅显示一行,同时保留累计的running_total值:
MonthYear running_total ------------------------- 202308 811 202307 805 202306 787 ...
内容的提问来源于stack exchange,提问作者Dmitri_V
相关产品推荐
相关产品推荐

