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

如何通过SQL关联查询获取多记录日期区间内的年度季度?

批量获取每条记录对应的区间内季度

表结构与需求回顾

  • QuarterIssue表(业务数据):
idAcq_DateDis_Date
12015-08-072016-12-31
22018-01-052022-12-31
32019-06-212022-12-31
  • QuarterYear表(季度主表):存储所有年度+季度的组合,示例包含2014-2016年的季度。

需求:为QuarterIssue中的每条id,找出其Acq_Date到Dis_Date之间的所有年度和季度组合。

问题分析

你原来的SQL用top 1只取了第一条记录的时间区间,只能处理单条数据。要批量搞定所有id,得把业务表和季度主表做关联,让每条业务记录都匹配自己对应的季度区间。

解决方案SQL

SELECT 
    QI.id,
    QY.[YEAR],
    QY.[Quarter],
    (QY.[YEAR] + CAST(QY.[Quarter] AS DECIMAL)/10) AS QuarterValue
FROM QuarterIssue QI
CROSS JOIN QuarterYear QY
WHERE 
    -- 用数值化方式对比季度区间,和你原来的逻辑一致
    (QY.[YEAR] + CAST(QY.[Quarter] AS DECIMAL)/10) 
    BETWEEN 
    (YEAR(QI.Acq_Date) + CAST(DATEPART(qq, QI.Acq_Date) AS DECIMAL)/10)
    AND 
    (YEAR(QI.Dis_Date) + CAST(DATEPART(qq, QI.Dis_Date) AS DECIMAL)/10)
ORDER BY QI.id, QY.[YEAR], QY.[Quarter];

说明

  • 用CROSS JOIN先把每条业务记录和所有季度做全关联,再通过WHERE条件筛出当前业务记录时间范围内的季度,这样就能批量处理所有id了。
  • 保留了你原来用的「年度+季度/10」的数值比较方式(比如2015年第3季度就是2015.3),这种方式能准确判断季度的先后顺序。
  • 最后加了排序,让每个id对应的季度按时间顺序排列,看起来更清楚。

如果QuarterYear表数据量很大,也可以用INNER JOIN替代CROSS JOIN,逻辑完全一致,因为WHERE条件会自动过滤掉不符合的组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:58