SQL关联季度与月度表 按另一表日期区间求和的实现问题
SQL季度数据关联求和实现方案
原代码问题分析
原SQL仅通过
A.Date = B.Date关联两张表,只会匹配到表2中与表1季末日期完全一致的单条月度记录,无法覆盖对应季度内的所有月份数据,因此求和结果不符合预期。
实现思路
- 统一将两张表的日期转换为「年份+季度」的统一维度标识
- 关联条件新增相同ID、相同年份、相同季度的匹配规则
- 按表1的ID、日期、名义金额分组,对表2的收益率求和
不同SQL方言实现示例
MySQL 版本
SELECT A.ID, A.Date, A.Notional, SUM(B.Yield) AS Yield FROM Table1 A LEFT JOIN Table2 B ON A.ID = B.ID AND YEAR(STR_TO_DATE(A.Date, '%d/%m/%Y')) = YEAR(STR_TO_DATE(B.Date, '%d/%m/%Y')) AND QUARTER(STR_TO_DATE(A.Date, '%d/%m/%Y')) = QUARTER(STR_TO_DATE(B.Date, '%d/%m/%Y')) GROUP BY A.ID, A.Date, A.Notional
如果Date字段本身为日期类型而非字符串,可直接删除STR_TO_DATE转换逻辑,直接调用日期函数即可
Oracle 版本
SELECT A.ID, A.Date, A.Notional, SUM(B.Yield) AS Yield FROM Table1 A LEFT JOIN Table2 B ON A.ID = B.ID AND TO_CHAR(TO_DATE(A.Date, 'DD/MM/YYYY'), 'YYYYQ') = TO_CHAR(TO_DATE(B.Date, 'DD/MM/YYYY'), 'YYYYQ') GROUP BY A.ID, A.Date, A.Notional
内容的提问来源于stack exchange,提问作者Ladislao Vidal
相关产品推荐
相关产品推荐

