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

MS Access查询:获取id1+id2唯一组合的最早记录

获取每个id1+id2组合的最早记录

以下是两种通用的SQL解决方案,适配不同数据库版本,满足你获取每个id1+id2唯一组合对应最早When记录的需求:

方法一:窗口函数(推荐,支持MySQL 8+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()窗口函数对每个id1+id2分组内的记录按When排序,取每组第一条:

SELECT ID, `When`, id1, id2
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY id1, id2 ORDER BY `When` ASC) AS rn
    FROM your_table_name -- 替换为你的表名
) t
WHERE rn = 1;
  • 若同一组合存在多条同一最早时间的记录,ROW_NUMBER()只会返回其中一条;若要保留所有同时间的最早记录,可替换为RANK()或DENSE_RANK()。
  • 仅需返回ID的话,简化为:
SELECT ID
FROM (
    SELECT 
        ID,
        ROW_NUMBER() OVER (PARTITION BY id1, id2 ORDER BY `When` ASC) AS rn
    FROM your_table_name
) t
WHERE rn = 1;

方法二:子查询关联(兼容低版本数据库,如MySQL 5.x)

先通过子查询算出每个id1+id2组合的最早时间,再关联原表匹配对应的记录:

SELECT t1.*
FROM your_table_name t1
INNER JOIN (
    SELECT id1, id2, MIN(`When`) AS earliest_when
    FROM your_table_name
    GROUP BY id1, id2
) t2 ON t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.`When` = t2.earliest_when;
  • 若同一组合有多个相同最早时间的记录,该查询会返回所有符合条件的行;若仅需一条,可结合MIN(ID)进一步筛选:
SELECT MIN(t1.ID) AS ID
FROM your_table_name t1
INNER JOIN (
    SELECT id1, id2, MIN(`When`) AS earliest_when
    FROM your_table_name
    GROUP BY id1, id2
) t2 ON t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.`When` = t2.earliest_when
GROUP BY t1.id1, t1.id2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:15:28