在Microsoft SQL Server 2014中查询每个ID对应最大Time值的完整行数据
2026-4-27
解决SQL Server 2014中获取每个ID最大Time对应Name的问题
#
没问题,我来帮你搞定这个需求!针对你使用的SQL Server 2014版本,这里有两种简单易理解且完全兼容的方法:
方法一:使用窗口函数ROW_NUMBER() #
这是最直观的方案,适合新手快速掌握。我们通过给每个ID分组内的行按时间降序编号,取编号为1的行(也就是时间最新的那一行):
SELECT ID, Name, Time FROM ( SELECT Name, Time, -- 按ID分组,每组内按Time从新到旧排序,生成唯一序号 ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Time DESC) AS row_num FROM YourTableName -- 替换成你的实际表名 ) ranked_data WHERE row_num = 1;
说明: #
-
PARTITION BY ID:将数据按ID拆分成独立的分组 -
ORDER BY Time DESC:每个分组内按时间从最新到最旧排序 -
ROW_NUMBER():给每个分组内的行生成唯一序号,最新时间的行序号为1 -
外层筛选
row_num = 1,就能精准拿到每个ID对应的目标行
如果你的数据中存在
同一个ID有多行时间完全相同的最大时间
,想要保留所有这些并列行,可以把
ROW_NUMBER()
换成
RANK()
,这样所有并列最大的行都会被返回。
方法二:使用关联子查询 #
如果你暂时还不熟悉窗口函数,这种基于子查询关联的方法也能实现需求:
SELECT t_main.ID, t_main.Name, t_main.Time
FROM YourTableName t_main
WHERE t_main.Time = (
-- 子查询获取当前ID对应的最大时间值