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

关联两表并基于Date字段去重:获取Table-2唯一记录

解决方案:关联表后获取每个AccountKey的最新记录

下面是几种可行的SQL实现方案,适配不同数据库场景:

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

利用ROW_NUMBER()窗口函数给每个AccountKey分组内的记录按日期倒序编号,取编号为1的就是最新记录:

SELECT t1.Id, t1.AccountKey, t2.Date
FROM Table1 t1
JOIN (
    SELECT 
        `Account Key`, 
        Date,
        ROW_NUMBER() OVER (PARTITION BY `Account Key` ORDER BY Date DESC) AS rn
    FROM Table2
) t2 ON t1.AccountKey = t2.`Account Key`
WHERE t2.rn = 1;

原理:子查询中按Account Key分组,对每组内的记录按Date降序排序,最新的记录会被标记为rn=1,再和Table1关联筛选出该记录即可。

方法2:子查询筛选最大日期后关联

先统计每个Account Key对应的最大日期,再通过关联获取对应记录,兼容性更好(适配旧版本数据库):

SELECT t1.Id, t1.AccountKey, t2.Date
FROM Table1 t1
JOIN Table2 t2 ON t1.AccountKey = t2.`Account Key`
JOIN (
    SELECT `Account Key`, MAX(Date) AS MaxDate
    FROM Table2
    GROUP BY `Account Key`
) t3 ON t2.`Account Key` = t3.`Account Key` AND t2.Date = t3.MaxDate;

原理:子查询t3先算出每个Account Key的最新日期,再通过两次关联确保只取Table2中对应该日期的记录,最后和Table1关联得到结果。

方法3:关联子查询(适合单条最新记录场景)

因为题目说明Table2的Date字段具有唯一性,每个AccountKey的最新日期对应唯一记录,也可以用关联子查询直接筛选:

SELECT t1.Id, t1.AccountKey, t2.Date
FROM Table1 t1
JOIN Table2 t2 ON t1.AccountKey = t2.`Account Key`
WHERE t2.Date = (
    SELECT MAX(Date)
    FROM Table2
    WHERE `Account Key` = t1.AccountKey
);

原理:对Table1中的每个AccountKey,通过子查询找到Table2中对应的最大日期,直接筛选出Table2中匹配该日期的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:01:47