MSSQL中实现分组取第一条记录的方法
最近项目中遇到了一个问题:对MSSQL数据库中的某张表进行按分组条件查询,取出每组结果中的第一条记录,除使用FOR,WHILE、Cursors游标处理之外,还有甚么更优的方法?
在MSSQL中实现分组取第一条记录的方法是通过ROW_NUMBER()函数,使用ROW_NUMBER() 函数,可以实现按分组条件查询,取出每组结果中的第一条记录的功能:
SELECT *
FROM
(
SELECT *, ROW_NUMBER() OVER( PARTITION BY FlagOrder BY Id) AS GroupFlag
FROM MyTable
) A
where A.GroupFlag = 1
其中,MyTable表是上表表名,
FlagOrder表示分组条件。
ROW_NUMBER()函数流程:
(1)先把表根据分组条件FlagOrder进行分组,每组以主键Id进行排序
(2)用ROW_NUMBER()函数计算每组排序后的条目,每组以1起始,顺次递增
(3)根据GroupFlag=1条件过滤出每组中的第一条记录
本方法可以比FOR,WHILE、Cursors游标处理更快,更安全,不会产生死锁等问题。特别支持MSSQL2008及以上版本,可以显著提升效力。
本文来源:https://www.yuntue.com/post/101708.html | 云服务器网,转载请注明出处!

微信扫一扫打赏
支付宝扫一扫打赏