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

SQL查询无结果排查:为何无法获取产品上月销售额?

条件a.mth = (select prev_mth from date_test b where b.mth = a.mth)失效原因分析

核心逻辑错误

这个条件的逻辑完全颠倒,导致无任何数据能满足匹配要求:

  • 对于sales表中的每一行记录a,子查询select prev_mth from date_test b where b.mth = a.mth会返回当前行月份对应的上月日期(比如a.mth是2024-10-31时,返回2024-09-30)
  • 随后条件判断a.mth = [返回的上月日期],相当于要求当前月份等于它的上月月份,这在时间逻辑上不可能成立,因此没有任何行能通过筛选,最终sales_prev_mth返回空结果。

结合测试数据验证

结合你的测试数据来看:

  • sales表只有2024-10-31和2024-09-30两个月份的数据
  • 当a.mth = '2024-10-31'时,子查询返回'2024-09-30',判断'2024-10-31' = '2024-09-30'不成立
  • 当a.mth = '2024-09-30'时,子查询返回'2024-08-31',判断'2024-09-30' = '2024-08-31'也不成立
    所有行都无法满足条件,自然没有结果输出。

正确逻辑方向

如果要获取每个月份的上月销售额,应该先通过date_test找到每个月份对应的上月日期,再将sales_sum与自身关联(或关联date_test后再关联sales_sum),匹配上月日期的销售额数据。例如修改后的CTE可以是:

sales_prev_mth as (
    select 
        s.mth,
        s.product,
        s.sum_price as mth_sum,
        coalesce(sp.sum_price, 0) as prev_mth_sum
    from sales_sum s
    left join date_test dt on s.mth = dt.mth
    left join sales_sum sp on dt.prev_mth = sp.mth and s.product = sp.product
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:26