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

如何查询表中每个unique_id对应的最新提交记录行?

解决方法:获取每个unique_id的最新提交记录

你的原SQL逻辑完全偏离需求——GROUP BY column1, column2, column3是按这三个字段分组,而非unique_id,再加上HAVING COUNT(*) > 1,直接过滤掉了所有仅含1条记录的unique_id,这肯定不符合要求。

以下是两种通用的正确写法:

方法1:使用窗口函数(推荐,适用于MySQL 8.0+、PostgreSQL、SQL Server等)

假设你的表中有一个标识提交时间的字段submit_time(如果是自增ID,比如record_id,逻辑一致,替换排序字段即可):

SELECT unique_id, column1, column2, column3
FROM (
    SELECT 
        t1.unique_id, 
        t1.column1, 
        t1.column2, 
        t1.column3,
        -- 按unique_id分组,按提交时间倒序,最新记录排第1
        ROW_NUMBER() OVER (PARTITION BY t1.unique_id ORDER BY t1.submit_time DESC) AS rn
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.X1 = t2.X2
) AS sub_query
WHERE rn = 1
ORDER BY column1;

核心逻辑:用PARTITION BY t1.unique_id把数据按unique_id分组,每组内按提交时间倒序排序,取排序后第一条(rn=1),就是该unique_id的最新记录,无论该组有1条还是多条数据。

方法2:关联子查询(兼容MySQL 5.x等不支持窗口函数的版本)

SELECT t1.unique_id, t1.column1, t1.column2, t1.column3
FROM table1 t1
INNER JOIN table2 t2 ON t1.X1 = t2.X2
WHERE NOT EXISTS (
    SELECT 1
    FROM table1 t1_dup
    WHERE t1_dup.unique_id = t1.unique_id
    -- 同样,用submit_time或自增ID判断记录新旧
    AND t1_dup.submit_time > t1.submit_time
)
ORDER BY column1;

核心逻辑:对每条记录,检查同unique_id下有没有比它更新的记录,如果没有,就说明这条是该unique_id的最新记录,会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:41