SQL查询求助:新增列按日期统计ID_Num的出现次数
解决方法:用窗口函数实现分组计数
嘿,你的需求刚好可以用SQL的窗口函数完美解决,完全不用给所有列加GROUP BY,正好满足你要保留其他多列的要求!
核心思路是利用COUNT()窗口函数,按ID_Num和Date做分区,这样就能计算出每个ID在对应日期下的出现次数,直接作为新增列返回,而且不会改变原表的行结构。
示例代码
假设你的表名叫your_table,需要查询的其他列比如还有Col1、Col2,可以这么写:
SELECT Date, ID_Num, Name, -- 新增的计数列:按ID和日期分组统计出现次数 COUNT(*) OVER (PARTITION BY ID_Num, Date) AS ID_Date_Occurrences, -- 把你需要的其他所有列都放在这里 Col1, Col2 FROM your_table;
效果说明
拿你提到的例子举例:
- 当
ID_Num=1001且Date='20/04/2018'时,这两行的ID_Date_Occurrences都会显示2 - 当
ID_Num=1001且Date='21/04/2018'或'22/04/2018'时,对应的行计数会显示1
窗口函数的优势就是不压缩原表行数,只是给每一行附加对应分组的统计值,所以你完全可以保留所有需要查询的列,不用受GROUP BY的限制~
内容的提问来源于stack exchange,提问作者S.McGuire
相关产品推荐
相关产品推荐

