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
相关产品推荐
相关产品推荐

