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

基于最大日期去重关联Test1与Test2表的SQL查询问题

问题分析

你的脚本返回空结果的核心原因是子查询取的是全局最大日期,而非每个Cat对应的最大日期,同时select语句中列名之间缺少逗号(语法错误)。

以你的测试数据为例:

  • Test1中Cat=123412的最大日期是2023-01-01 13:02:01
  • Test2中Cat=123412的最大日期是2023-01-01 15:02:01

原脚本的where test1.date = (select max(test1.date) from Test1)能正确筛选出Test1中该Cat的最大日期记录,但左连接条件test2.date = (select max(test2.date) from Test2)是取Test2全局最大日期,若存在语法错误或逻辑匹配偏差,就会返回空结果。

解决方案

以下两种方法均可实现“每个Cat对应最大日期的无重复记录”需求:

方法一:子查询筛选单表最大日期记录后关联

先分别筛选出两张表中每个Cat的最大日期记录,再进行关联:

select 
  test1.cat,
  test2.cat
from 
  -- 筛选Test1中每个Cat的最大日期记录
  (select cat, dog, date from Test1 t1 
   where date = (select max(date) from Test1 where cat = t1.cat)) test1
left join 
  -- 筛选Test2中每个Cat的最大日期记录
  (select cat, parrot, date from Test2 t2 
   where date = (select max(date) from Test2 where cat = t2.cat)) test2 
on test2.cat = test1.cat

方法二:先分组获取最大日期,再关联原表

先通过分组得到每个Cat的最大日期,再关联原表获取完整记录:

select 
  t1.cat,
  t2.cat
from 
  -- 获取Test1每个Cat的最大日期
  (select cat, max(date) as max_date from Test1 group by cat) t1_max
-- 关联Test1得到对应最大日期的完整记录
join Test1 t1 on t1.cat = t1_max.cat and t1.date = t1_max.max_date
left join 
  -- 获取Test2每个Cat的最大日期
  (select cat, max(date) as max_date from Test2 group by cat) t2_max 
on t2_max.cat = t1.cat
-- 关联Test2得到对应最大日期的完整记录
left join Test2 t2 on t2.cat = t2_max.cat and t2.date = t2_max.max_date
关键说明
  • 两种方法都确保了按Cat分组取最大日期,而非全局最大,能正确匹配每个Cat对应的最新记录
  • 保留左连接逻辑,确保即使Test2中没有对应Cat的记录,也能显示Test1的结果
  • 修复了select语句中列名之间缺少逗号的语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:39