You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取各唯一ID对应max(time_to_prioritize)的完整行数据?

解决方法

方案1:用窗口函数(最简洁)

这是主流数据库(MySQL 8.0+、SQL Server、PostgreSQL等)都支持的写法,直接按ID分组后给每条数据排序,取每组里时间最新的那条:

SELECT ID, time_to_prioritize, extra_info_1, extra_info_2
FROM (
    SELECT 
        *,
        -- 按ID分组,组内按时间倒序排,每组第一条标记为1
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY time_to_prioritize DESC) AS row_num
    FROM my_table
) temp
WHERE row_num = 1;

如果同一个ID有多条记录的time_to_prioritize是相同的最大值,这个方法只会返回其中一行;要是想保留所有同最大值的行,把ROW_NUMBER()换成RANK()即可。

方案2:子查询关联原表

先找出每个ID对应的最大时间,再用这个结果去匹配原表拿完整行:

SELECT main.*
FROM my_table main
INNER JOIN (
    -- 先分组算出每个ID的最大时间
    SELECT ID, MAX(time_to_prioritize) AS latest_time
    FROM my_table
    GROUP BY ID
) max_times ON main.ID = max_times.ID AND main.time_to_prioritize = max_times.latest_time;

这个方法会返回所有同ID且时间等于最大值的行,适合需要保留所有极值记录的场景。

你之前的问题出在哪?

  • SELECT TOP 1 * ...只能拿到全表时间最大的那一行,没法处理每个ID各自的最大值。
  • 自连接没成功大概率是关联条件没写全——只关联了ID,但没匹配time_to_prioritize和对应的最大值,导致关联后没找到匹配的数据。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:35:23