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

SQL如何查询每个ID对应最早时间记录的所有列数据

提取每个ID对应最早时间全量记录的SQL写法

你要实现的是分组取组内排序第一的整行数据需求,有两种通用的实现方案,可根据你使用的数据库版本选择:

方案1:窗口函数实现(推荐,适配主流新版数据库)

支持MySQL 8.0+、PostgreSQL、SQL Server、Hive、SparkSQL等绝大多数现在常用的数据库引擎,逻辑清晰性能好:

-- 把下面的your_table替换成你实际的表名即可
SELECT id, time, location, price 
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY time ASC) AS row_rank
    FROM your_table
) tmp
WHERE row_rank = 1;
  • 逻辑说明:PARTITION BY id会按id把数据分成多个组,ORDER BY time ASC会在每个组内按时间从早到晚排序,ROW_NUMBER()会给组内每一行按排序结果生成从1开始的连续序号,外层过滤序号为1的行,就是每个id下时间最早的那条记录。
  • 补充:如果同一个id下存在多条时间完全一致的最早记录,你需要把所有匹配记录都返回的话,把ROW_NUMBER()替换成RANK()即可。

方案2:聚合关联实现(兼容老版本数据库)

如果是用MySQL 5.x这类不支持窗口函数的旧版本,可以用分组聚合先算出每个id的最早时间,再关联原表取数:

SELECT t1.*
FROM your_table t1
INNER JOIN (
    SELECT id, MIN(time) AS earliest_time
    FROM your_table
    GROUP BY id
) t2
ON t1.id = t2.id AND t1.time = t2.earliest_time;
  • 注意:这个写法如果同一个id下有多条记录的时间等于该id的最早时间,会把这些记录全部返回。

用你提供的示例数据跑上述SQL,返回结果和你的预期完全一致:

idtimelocationprice
12022-05-01A112
22022-03-01B221

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:33:21