如何为查询上一次出席记录的SQL新增累计出席次数字段
解决方案
可通过新增COUNT窗口函数直接统计每个ID的累计出席总次数,无需额外关联子查询,修改后的SQL如下:
SELECT ID, IDATE AS DATE, AttendTotal AS [Count] FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.IDATE DESC) AS rowNum, COUNT(*) OVER (PARTITION BY A.ID) AS AttendTotal, A.ID, A.IDATE FROM ATTENDANCE A INNER JOIN STUDENT_LINE SL ON A.ID = SL.ID ) withRowNum WHERE rowNum = 2
改动说明
- 新增
COUNT(*) OVER (PARTITION BY A.ID)窗口函数,按ID分组统计对应人员的所有出席记录数,同一ID的所有行都会返回相同的总次数值 - 外层查询直接取出总次数字段,别名设置为要求的
Count即可,若你使用的数据库将Count识别为保留字,用对应数据库的标识符包裹即可(如SQL Server用方括号、MySQL用反引号) - 你原代码中的
select top ID属于语法错误,TOP关键字后需指定返回行数,当前业务逻辑是按ID分组取每组第二条记录,不需要加TOP,已在修改后的代码中移除
内容的提问来源于stack exchange,提问作者Helen Neely
相关产品推荐
相关产品推荐

