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

SQL如何使用另一张表的日期区间过滤后按日期分组统计成本总和

问题排查

你现有查询存在两个核心问题:

  • 仅统计了有符合条件消费记录的月份,无消费的月份不会自动出现在结果中
  • 未对空聚合结果做转换,无法输出要求的-占位符
解决方案

你需要先生成覆盖所有需要统计的时间范围的连续月份最后一天序列,再左关联你已经计算好的符合条件的月度聚合结果,最后处理空值即可。以下以MySQL为例的可运行代码,其他数据库仅需调整连续月份生成语法:

WITH RECURSIVE all_months AS (
    -- 生成统计范围的所有月份最后一天,可根据实际需求调整起止时间
    SELECT LAST_DAY(MIN(start_date)) as month_end FROM table2
    UNION ALL
    SELECT LAST_DAY(month_end + INTERVAL 1 MONTH) 
    FROM all_months 
    WHERE month_end < (SELECT MAX(end_date) FROM table2)
),
valid_cost AS (
    -- 计算符合区间条件的月度成本总和
    SELECT 
        LAST_DAY(t1.date) as month_end,
        SUM(REPLACE(t1.cost, '$', '') + 0) as total_cost -- 处理示例中cost带$符号的场景,实际为数值可删除转换逻辑
    FROM table1 t1
    INNER JOIN table2 t2 
        ON t1.id = t2.id 
        AND t1.date BETWEEN t2.start_date AND t2.end_date
    GROUP BY LAST_DAY(t1.date)
)
-- 关联输出最终结果
SELECT 
    am.month_end,
    IFNULL(vc.total_cost, '-') as total_cost
FROM all_months am
LEFT JOIN valid_cost vc ON am.month_end = vc.month_end
ORDER BY am.month_end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 17:54:04