如何编写SQL实现同时查询过去5周及未来5周的库存数据
问题原因分析
- 逻辑运算符使用错误:你需要获取两个查询结果的并集(同时包含过去5周、未来5周的库存数据),应该使用
OR运算符,你之前使用的AND是取两个条件的交集,不存在同时满足两个对立条件的数据,自然无返回。 - 合并的条件本身逻辑矛盾:你尝试拼接的两个
DATEDIFF判断小于5和大于5不可能同时成立,没有任何记录能匹配该规则。
正确合并写法
写法1:直接合并你已验证可用的两条语句
仅将之前的AND替换为OR即可拿到两个查询的全部结果:
SELECT * FROM Table WHERE vdvInventory.Count >= CAST(DATEADD(WEEK, -5, GETDATE()) as DATE) OR DATEDIFF(WEEK,vdvInventory.Count,GETDATE() )<5
如果你的第二条语句单独运行时返回的不是未来5周数据,将DATEDIFF的两个日期参数互换即可:DATEDIFF(WEEK,GETDATE(),vdvInventory.Count )<5
写法2:更简洁的范围判断(推荐,适配Excel自动运行场景)
直接用BETWEEN限定库存日期的范围,逻辑更清晰,后续维护不易出错:
SELECT * FROM Table WHERE vdvInventory.Count BETWEEN CAST(DATEADD(WEEK, -5, GETDATE()) AS DATE) AND CAST(DATEADD(WEEK, 5, GETDATE()) AS DATE)
如果vdvInventory.Count字段包含时间部分,去掉CAST(... AS DATE)的转换即可,不会影响范围判断的准确性。
内容的提问来源于stack exchange,提问作者MyOwnIssues
相关产品推荐
相关产品推荐

