查询每组(val1、val2唯一组合)的最新created_date记录
双表分组获取最新记录的SQL方案
核心思路
先合并两张表的所有数据,再通过窗口函数为每个val1+val2组合的记录按created_date倒序排名,取排名第一的记录即为该组合的最新完整数据。
示例SQL代码
假设两张表分别为table1和table2,且均包含val1、val2、num1、num2、created_date字段:
WITH combined_data AS ( -- 合并两张表的数据 SELECT val1, val2, num1, num2, created_date FROM table1 UNION ALL SELECT val1, val2, num1, num2, created_date FROM table2 ), ranked_records AS ( -- 为每个组合的记录按日期倒序排名 SELECT *, ROW_NUMBER() OVER (PARTITION BY val1, val2 ORDER BY created_date DESC) AS record_rank FROM combined_data ) -- 筛选每个组合的最新记录 SELECT val1, val2, num1, num2, created_date FROM ranked_records WHERE record_rank = 1 ORDER BY val1, val2;
补充说明
- 如果同一
val1+val2组合存在多条created_date完全相同的记录,ROW_NUMBER()会随机返回其中一条;若需保留所有同日期的最新记录,可将ROW_NUMBER()替换为RANK()或DENSE_RANK()。 - 确保两张表的字段类型完全匹配,避免
UNION ALL时出现类型错误。
内容的提问来源于stack exchange,提问作者JohnP
相关产品推荐
相关产品推荐

