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

按ID删除最早记录(含多条同日期最早记录)的技术实现问题

解决方案

方法1:子查询筛选

先找出每个ID对应的最早日期,再筛选掉所有日期等于该ID最早日期的记录。假设表名为your_table,SQL语句如下:

SELECT t.ID, t.DATE
FROM your_table t
JOIN (
    SELECT ID, MIN(STR_TO_DATE(DATE, '%d/%m/%Y')) AS min_date
    FROM your_table
    GROUP BY ID
) sub ON t.ID = sub.ID
WHERE STR_TO_DATE(t.DATE, '%d/%m/%Y') > sub.min_date;

不同数据库的日期转换函数略有差异:

  • MySQL用STR_TO_DATE(DATE, '%d/%m/%Y')
  • PostgreSQL用TO_DATE(DATE, 'DD/MM/YYYY')
  • SQL Server用CONVERT(DATE, DATE, 103)

方法2:窗口函数标记

用窗口函数直接计算每个ID分组内的最小日期,再过滤掉匹配最小日期的记录:

SELECT ID, DATE
FROM (
    SELECT 
        ID, 
        DATE,
        MIN(STR_TO_DATE(DATE, '%d/%m/%Y')) OVER (PARTITION BY ID) AS min_date
    FROM your_table
) t
WHERE STR_TO_DATE(t.DATE, '%d/%m/%Y') > t.min_date;

说明

你之前用的排序去重只会删除单条最早记录,没法处理同一ID下多条同日期的最早记录。上面两种方法都是基于日期值筛选,只要是该ID的最早日期,不管有多少条都会被全部删除,完全匹配你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:45:32