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

Periscope平台SQL查询WHERE语句无法正确过滤近24小时数据问题求助

问题根因

你的SQL写法确实存在逻辑错误,核心是SQL逻辑运算符优先级导致的条件执行逻辑不符合预期:SQL中AND的运算优先级高于OR,你编写的WHERE条件实际执行时会被解析为如下逻辑:

(exampleX = exampleY) 
OR 
(exampleX is null AND productiondate > DATEADD(day,-1, GETDATE()) AND example1 <> 'XXX' AND example2 <> 'YYY' AND example2 <> 'ZZZ')

也就是说只要数据满足exampleX = exampleY,无论生产日期、其他筛选条件是否符合要求,都会被包含在查询结果里,这就是你会查到一周前数据的原因。

修正后的查询语句

只需要将OR关联的两个条件用括号括起来,明确为一个组合判断条件即可:

select example1, 
    example2, 
    example3,
    productiondate,
    example4, 
    example5
from final
where (exampleX = exampleY or exampleX is null)
and productiondate  > DATEADD(day,-1, GETDATE())
and example1 <> 'XXX'
and example2 not in ('YYY', 'ZZZ')
order by 2
可选优化点
  • 涉及多条件组合、特别是包含OR的场景,主动加括号明确运算优先级,避免依赖隐式优先级出现逻辑偏差
  • 如果productiondate是不带时分秒的日期类型,可将日期筛选调整为productiondate >= CAST(DATEADD(day,-1, GETDATE()) AS DATE),避免GETDATE()的时分秒导致昨日零点到当前执行时间前的部分数据被误过滤
  • 多个同字段不等于判断可以替换为NOT IN写法,简化代码提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 20:36:04