You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Microsoft SQL Server 2014中查询每个ID对应最大Time值的完整行数据

解决SQL Server 2014中获取每个ID最大Time对应Name的问题

没问题,我来帮你搞定这个需求!针对你使用的SQL Server 2014版本,这里有两种简单易理解且完全兼容的方法:

方法一:使用窗口函数ROW_NUMBER()

这是最直观的方案,适合新手快速掌握。我们通过给每个ID分组内的行按时间降序编号,取编号为1的行(也就是时间最新的那一行):

SELECT ID, Name, Time
FROM (
    SELECT 
        ID, 
        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对应的最大时间值
    SELECT MAX(Time)
    FROM YourTableName t_sub
    WHERE t_sub.ID = t_main.ID
);

说明:

  • 子查询会为每个ID单独计算出对应的最大Time值
  • 外层表通过匹配ID和这个最大Time值,直接拿到对应的Name字段
  • 注意:如果同一个ID有多个行的Time是并列最大的,这个方法会返回所有这些行;如果只需要一行结果,可以结合TOP 1ORDER BY调整,但方法一的窗口函数会更灵活。

额外提示

如果你的表数据量较大,建议给IDTime字段创建联合索引,能显著提升这两种查询的执行效率。

内容的提问来源于stack exchange,提问作者Jdbfkfo

火山引擎 最新活动