MSSQL中实现分组取第一条记录的方法(mssql 分组取第一条)

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及以上版本,可以显著提升效率。


数据运维技术 » MSSQL中实现分组取第一条记录的方法(mssql 分组取第一条)