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