【问题标题】:SQL - Find value for the last 5 weeks and the next 5 weeks in the same querySQL - 在同一查询中查找过去 5 周和接下来 5 周的值
【发布时间】:2021-11-20 15:18:37
【问题描述】:

我需要在我运行查询(将连接到 Excel 并每天运行)的任何一天找到过去 5 周和接下来 5 周的库存值。

我可以单独找到它们,但是当它们一起完成时,我不会得到任何回报。

以下单独工作,有没有办法合并得到所有的回报?

Select * FROM Table
WHERE vdvInventory.Count >= CAST(DATEADD(WEEK, -5, GETDATE()) as DATE)

或者

Select * FROM Table
WHERE DATEDIFF(WEEK,vdvInventory.Count,GETDATE() )<5

如果我尝试使用 ADD 将两个 where 语句添加到一个中,我不会得到任何回报。 例如:

Select * FROM Table
WHERE DATEDIFF(WEEK,vdvInventory.Count,GETDATE() )<5
AND DATEDIFF(WEEK,vdvInventory.Count,GETDATE() )>5

感谢您对此的任何帮助或指导!

【问题讨论】:

  • 第一种方法可能是UNION 您提到的前两个查询。但最好的方法是使用窗口函数(PARTITION BY 语句)。

标签: sql datediff


【解决方案1】:

您的查询不起作用,因为您有一个矛盾的陈述:同一个表达式 (DATEDIFF(WEEK,vdvInventory.Count,GETDATE())) 不能同时小于和大于 5。

尝试以下方法:

Select * FROM Table
WHERE vdvInventory.Count >= CAST(DATEADD(WEEK, -5, GETDATE()) as DATE)
and vdvInventory.Count <= CAST(DATEADD(WEEK, 5, GETDATE()) as DATE)

【讨论】:

  • 我仍然有这个问题。我尝试了以下方法:Select * FROM Table WHERE DATEDIFF(WEEK,vdvInventory.Count,GETDATE() )&lt;5 union Select * FROM Table WHERE DATEDIFF(WEEK,vdvInventory.Count,GETDATE() )&gt;5 但是,这将根据需要给我接下来的 5 周,但过去的一切都需要 5 周及以后。我基本上想要一个循环运行的 11 周(前 5 周,当前,下 5 周)。你有什么建议吗?
  • @MyOwnIssues 只是为了确保我理解,假设今天的日期是 2021 年 10 月 1 日,您搜索的时间段是 5 天(为简单起见)。您想获取 05/01/2021 到 15/01/2021 之间的所有 vdvInventory.Count 记录吗?
  • @MyOwnIssues 请检查我更新的解决方案,它应该适合你。
  • 加比普,你明白了!!!谢谢,你的假设是正确的。我正在尝试找出库存问题,而这正是我所需要的。
  • @MyOwnIssues 乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多