MSSQL ROW_NUMBER() OVER (...)实现数据的分组、排序、过滤重复、取Top n记录

本文介绍了如何利用MSSQL的ROW_NUMBER() OVER()函数进行数据分组、排序,以及过滤重复和选取Top n记录。通过partition by实现类似group by的功能,解决当某月份没有进展状态录入时,查询该月份之前最新进展的问题。通过添加行号rowNum,可以方便地进行数据筛选,避免完全重复的[CriterionID],[MissionIsFinish],[MissionMonth]记录。" 105435252,9462444,2017年百度杯CTF比赛爆破解析1-3,"['网络安全', 'CTF挑战', '漏洞利用', 'Web安全', 'Python编程']
摘要由CSDN通过智能技术生成
select  [CriterionID],[MissionIsFinish] ,[MissionMonth] from 
(
select [CriterionID],[MissionIsFinish],[MissionMonth],
row_number() over(partition by [CriterionID] order by [MissionMonth] desc) as rowNum
from [fts].[v_TTM_DOAM_MissionList]
where [IsDel]=0 and [MissionYear]=2013 and [MissionMonth]<=12 and [MissionMonth]>0
group by [CriterionID],[MissionIsFinish],[MissionMonth]
) as tb
where rowNum=1

 

[fts].[v_TTM_DOAM_MissionList]列出了过往各工作内容(CriterionID)每个已录入月份(MissionMonth)的进展状态(MissionIsFinish),其中可能有的进展已经在过去的时间已经完成,后续不再录入,或者有的进展录入中间隔了n个月没录。

上面的代码是查询各进展最新月份(top 1)的记录, 如果要取top n,把最后的where 条件改为rowNum<=n即可

partition by 是用来分组的,可以理解为group by

该语句要实现的功能是:

查询工作内容(CriterionID)在当前月份(MissionMonth)的工作进展状态(MissionIsFinish)

问题在于:

如果我们要取工作内容某月份的进展状态,但是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值