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

SQL INNER JOIN带日期过滤的分组聚合查询问题咨询

SQL问题解答

现有表结构与示例数据

  • Table1
ID  Date  

1   2022-01-01
2   2022-02-01
3   2022-02-05
  • Table2
ID   Date         Amount
 
1    2021-08-01     15
1    2022-02-10     15
2    2022-02-15      20
2    2021-01-01     15
2    2022-02-20     20
1    2022-03-01     15

需求目标

筛选Table2中日期晚于Table1同ID对应Date的记录,按ID分组,计算每个分组的Amount总和、分组内的最大日期,预期输出结果如下:

ID    Date         Amount
1     2022-03-01    30
2     2022-02-20    40

问题原因

你之前写的查询仅完成了两表ID的关联,缺少两个核心逻辑:

  1. 没有添加日期过滤条件,无法排除Table2中日期早于同ID下Table1日期的记录
  2. 没有做分组聚合计算,无法得到求和、取最大日期的结果
    另外你写的两层CTE没有做任何额外数据处理,属于冗余写法,可以直接省略。

正确SQL代码

SELECT
  b.ID,
  MAX(b.Date) AS Date,
  SUM(b.Amount) AS Amount
FROM Table1 a
INNER JOIN Table2 b 
  ON a.ID = b.ID 
  AND b.Date > a.Date
GROUP BY b.ID;

执行逻辑说明

  • 两表关联时同时匹配两个条件:ID相等、Table2的日期严格大于Table1同ID的日期,关联阶段就会自动过滤掉不符合时间要求的记录
  • 关联过滤完成后,按ID分组,用MAX()函数取分组内最晚日期,SUM()函数计算分组内符合条件的金额总和,即可得到预期结果
  • ID=3在Table2中无匹配记录,INNER JOIN会自动过滤,不会出现在最终结果中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.04 16:18:27