SQL Server中如何按Name分组取最新Date_Time的TOP 1数据?
解决方案:获取每个分组的最新记录
针对你需要按Name分组,取每组中Date_Time最新(降序TOP 1)记录的需求,这里给你几个在SQL Server中常用的实现方式,你可以根据自己的SQL Server版本和场景选择:
方法1:使用ROW_NUMBER()窗口函数(兼容性最好)
这是最通用的写法,几乎适用于所有SQL Server版本,逻辑清晰也容易扩展:
SELECT Name, Fee, Date_Time FROM ( SELECT Name, Fee, Date_Time, -- 按Name分组,每组内按Date_Time倒序编号 ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date_Time DESC) AS row_num FROM YourTableName -- 替换成你的实际表名 ) ranked_data WHERE row_num = 1;
方法2:使用TOP 1 WITH TIES(写法更简洁)
如果追求代码简洁,可以用这个方式,它会自动返回所有分组的第一条记录:
SELECT TOP 1 WITH TIES Name, Fee, Date_Time FROM YourTableName -- 替换成你的实际表名 ORDER BY ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date_Time DESC);
方法3:使用QUALIFY子句(SQL Server 2022+)
如果你用的是SQL Server 2022及以上版本,QUALIFY子句可以让你不用嵌套子查询,写法更直观:
SELECT Name, Fee, Date_Time FROM YourTableName -- 替换成你的实际表名 QUALIFY ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date_Time DESC) = 1;
这几种方法都能得到你想要的结果集,记得把YourTableName替换成你实际的表名哦~
内容的提问来源于stack exchange,提问作者Nitesh Suthar
相关产品推荐
相关产品推荐

