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

如何用SQL查询跨月份CSNA值发生变化的行与ID

解决月度表CSNA值变化的查询问题

你之前的查询没有指定jan_data和feb_data的关联条件(比如通过ID匹配),数据库执行了笛卡尔积——把jan_data的每一行和feb_data的每一行强制组合,结果行数自然远大于单表行数,这就是问题根源。

正确查询逻辑(以jan到feb为例)

1. 查找ID在两表都存在且CSNA变化的行

如果只关注已有ID的CSNA变动,用INNER JOIN关联同ID行,再筛选CSNA不同的记录:

SELECT 
    f.ID,
    j.CSNA AS jan_CSNA,
    f.CSNA AS feb_CSNA
FROM feb_data f
INNER JOIN jan_data j ON f.ID = j.ID
WHERE j.CSNA <> f.CSNA;

这个查询会返回你示例中的1234770286和1234770331这两个ID的变动记录。

2. 包含月度新增行的完整变化查询

如果需要同时统计feb新增的ID(jan中无对应记录),用LEFT JOIN以feb表为主表,关联jan表后筛选变化或新增的记录:

SELECT 
    f.ID,
    j.DATE AS jan_date,
    j.CSNA AS jan_CSNA,
    f.DATE AS feb_date,
    f.CSNA AS feb_CSNA
FROM feb_data f
LEFT JOIN jan_data j ON f.ID = j.ID
WHERE 
    -- 已有ID的CSNA变化(含NULL值情况)
    (j.CSNA <> f.CSNA OR j.CSNA IS NULL OR f.CSNA IS NULL)
    -- 或feb新增的ID
    OR j.ID IS NULL;

扩展到feb到mar的查询

只需替换表名,逻辑完全一致:

SELECT 
    m.ID,
    f.CSNA AS feb_CSNA,
    m.CSNA AS mar_CSNA
FROM mar_data m
INNER JOIN feb_data f ON m.ID = f.ID
WHERE f.CSNA <> m.CSNA;

注意事项

  • 确保ID是每行的唯一标识,否则关联会出现错误匹配。
  • 若CSNA字段可能为NULL,必须单独加入IS NULL的判断,因为NULL与任何值的比较结果都是NULL,不会被WHERE条件命中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:21