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

按日期范围关联两张表并分组统计的SQL查询问题求助

修正后的SQL查询及问题解析

问题根源

你的查询出现NULL值的核心原因:

  • 关联方向错误:使用LEFT JOIN以工时表(Table1)为主,导致当预算表(Table2)中2022年的记录没有匹配工时数据时,会丢失Table2的Client等信息;反之如果Table2有记录但Table1无对应工时,也会因为取t1.client而得到NULL。
  • 字段名不匹配:你引用的t2.from_date、t2.to_date、t2.budget和Table2实际字段名(Start Range、End Range、Time Budget)不符。
  • 聚合分组逻辑未对齐:分组字段来源不统一,导致统计异常。

修正后的SQL

SELECT
    t2.`Task` AS task,
    t2.`Time Budget` AS budget,
    t2.`Client` AS client,
    t2.`Start Range` AS start_range,
    t2.`End Range` AS end_range,
    COALESCE(SUM(t1.`Hours`), 0) AS time_spent
FROM `Table2` t2
LEFT JOIN `Table1` t1
    ON t1.`Task` = t2.`Task`
    AND t1.`Client` = t2.`Client`
    AND DATE(t1.`Time`) BETWEEN t2.`Start Range` AND t2.`End Range`
GROUP BY
    t2.`Task`,
    t2.`Time Budget`,
    t2.`Client`,
    t2.`Start Range`,
    t2.`End Range`

关键修改说明

  • 调整关联方向:以预算表Table2作为左表,确保所有预算记录都被保留,即使没有对应工时数据。
  • 修正字段引用:使用Table2的实际字段名(带空格的字段需用反引号包裹),避免因字段名错误导致的匹配失败。
  • 替换Client来源:从t1.client改为t2.client,确保即使没有工时数据,Client信息也不会为NULL。
  • 添加COALESCE函数:将NULL的工时统计转为0,结果更符合业务逻辑。
  • 规范分组字段:分组字段明确引用Table2的字段,确保分组逻辑和SELECT字段完全对齐(部分SQL方言要求所有非聚合字段必须出现在GROUP BY中)。

额外注意事项

  • 确认DATE(t1.Time)和t2.Start Range/t2.End Range的日期类型一致(例如都是DATE或DATETIME),避免日期格式不匹配导致的关联失败。
  • 如果需要按年度筛选,可以在查询末尾添加WHERE YEAR(t2.Start Range) = 2022(或根据日期范围判断年度)来针对性统计某一年的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:12:46