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

SQL并行周期(同期)查询无需使用UNION的实现方法咨询

无需UNION的同期对比SQL实现方案

方案1:单行两列返回(适配同比计算场景)

该方案将两个周期的统计结果放在同一行的不同列,方便直接计算同比增长率等指标,仅需扫描一次销售表,性能更优:

SELECT
    SUM(CASE WHEN date BETWEEN '2014-01-01' AND '2014-02-01' THEN Profit ELSE 0 END) AS current_period_profit,
    SUM(CASE WHEN date BETWEEN '2014-01-01' - INTERVAL 1 YEAR AND '2014-02-01' - INTERVAL 1 YEAR THEN Profit ELSE 0 END) AS last_year_same_period_profit
FROM Sales
WHERE 
    (date BETWEEN '2014-01-01' AND '2014-02-01' 
    OR date BETWEEN '2014-01-01' - INTERVAL 1 YEAR AND '2014-02-01' - INTERVAL 1 YEAR)
    AND <other_filters>

核心逻辑:放宽WHERE层的时间过滤范围,同时覆盖当前统计周期和往期对比周期,再通过CASE WHEN按时间归属条件分别做聚合求和。

方案2:两行返回(和原UNION ALL输出格式完全一致)

如果需要保留原UNION ALL返回两行的格式,可以用预定义时间区间关联聚合的方式实现:

SELECT SUM(s.Profit) AS period_profit
FROM (
    -- 可灵活扩展更多对比时间区间
    VALUES 
        ('2014-01-01', '2014-02-01'),
        ('2014-01-01' - INTERVAL 1 YEAR, '2014-02-01' - INTERVAL 1 YEAR)
) AS periods(start_date, end_date)
JOIN Sales s 
    ON s.date BETWEEN periods.start_date AND periods.end_date
WHERE <other_filters>
GROUP BY periods.start_date, periods.end_date
ORDER BY periods.start_date DESC

核心逻辑:通过VALUES子句生成所有需要统计的时间区间维度表,和销售表关联后按区间分组聚合,后续新增对比周期仅需在VALUES列表中追加行即可,可维护性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:04