如何使用ROW_NUMBER()仅对不同rolesContainerID计数?
解决方案
你需要将原查询中的ROW_NUMBER()替换为DENSE_RANK()函数,因为DENSE_RANK()会为具有相同rolesContainerID的行分配相同的排名值,并且排名是连续递增的,正好符合你需要同一rolesContainerID对应相同count#的需求。
修改后的SQL查询如下:
SELECT sg.rolesID, count# = DENSE_RANK() OVER (ORDER BY sg.rolesContainerID), sg.rolesContainerID, eventTimeStamp AS timeStarted, eventTimeStamp AS timeFinished FROM view_SecurityGroup sg WHERE sg.rolesID = '22400ab8-62a2-4a69-b002-5dd4d0459728' ORDER BY sg.rolesContainerID, timeStarted, timeFinished DESC
关键差异说明:
ROW_NUMBER():对结果集中的每一行生成唯一的连续编号,即使行的排序字段值相同,编号也会逐行递增。DENSE_RANK():为排序字段值相同的行分配相同的排名,且排名不会出现间隔(不会出现1、1、3这类跳号情况),完全匹配你期望的count#仅在rolesContainerID变化时递增的规则。
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

