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

如何从含日期字段的数据集中提取每日的首条记录?

如何提取每日的首条记录?

嗨,这个需求在数据处理里挺常见的,我给你两种实用的SQL解决方案,适配不同的数据库环境:


方案一:使用窗口函数(推荐,适用于主流数据库)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),用ROW_NUMBER()是最直观的方式。它能帮我们给每个日期组内的记录排序,然后筛选出每组的第一条。假设你的表名为your_table,代码如下:

SELECT id, name, date
FROM (
    SELECT 
        id, 
        name, 
        date,
        -- 按日期分组,组内按id升序排序,给每条记录标序号
        ROW_NUMBER() OVER (PARTITION BY date ORDER BY id) AS row_num
    FROM your_table
) temp
-- 只取每组的第一条记录
WHERE row_num = 1;

逻辑解释:

  • PARTITION BY date:把数据按date字段拆分,同一个日期的记录归为一组
  • ORDER BY id:在每个日期组内按id从小到大排序,这样最小的id就对应该日期的首条记录
  • 外层查询筛选row_num=1的记录,就是我们要的每日首条

方案二:关联子查询(适配老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用子查询先找到每个日期的最小id,再关联原表获取完整记录:

SELECT t1.id, t1.name, t1.date
FROM your_table t1
INNER JOIN (
    -- 按日期分组,找出每个日期对应的最小id
    SELECT date, MIN(id) AS min_id
    FROM your_table
    GROUP BY date
) t2 ON t1.date = t2.date AND t1.id = t2.min_id;

逻辑解释:

  • 子查询先按date分组,拿到每个日期的最小id(也就是该日期的首条记录id)
  • 通过INNER JOIN把原表和子查询结果关联,匹配到对应id的完整记录

用你提供的测试数据验证,两种方案都会得到你期望的结果:

1 | aaa | 2018-05-10
4 | ddd | 2018-05-11
6 | fff | 2018-05-13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:56