首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中从当前日期获取最近6个月的前一个月数据

如何在SQL中从当前日期获取最近6个月的前一个月数据
EN

Stack Overflow用户
提问于 2021-11-25 07:40:59
回答 3查看 74关注 0票数 0

我们如何修改下面的脚本来获取最近6个月的第一个月数据?

代码语言:javascript
复制
  select datetimeInsert, Part_no,qty
  FROM  RECEIPT 
  where 
  datediff(month, datetimeInsert, getdate()) <= 6

=>跳过最近5个月的数据,仅显示前6个月的第1个月数据

EN

回答 3

Stack Overflow用户

发布于 2021-11-25 09:11:51

看起来你应该使用日期界限。所以就像这样:

代码语言:javascript
复制
SELECT datetimeInsert,
       Part_no,
       qty
FROM dbo.receipt
WHERE datetimeInsert >= DATEADD(DAY, 1, EOMONTH(GETDATE(),-7))
  AND datetimeInsert < DATEADD(DAY, 1, EOMONTH(GETDATE(),-6));

EOMONTH获取月底的日期。例如,EOMONTH(GETDATE(),-7)返回7个月前一个月的最后一个date (GETDATE()是今天,然后第二个参数是7个月前)。因此,就今天而言,这将是2021-04-30。然后我将值加上一天,以获得6个月前该月的第一天:2021-05-01。然后,我对5/6月使用相同的逻辑。

因此,这最终要求datetimeInsert的值为>= 2021-05-01和< 2021-06-01;这意味着2021年5月的每个日期和时间值。

票数 2
EN

Stack Overflow用户

发布于 2021-11-25 09:05:26

因此,如果您只想要6个月前的数据,请使用equal而不是less the

代码语言:javascript
复制
select datetimeInsert, Part_no,qty
  from receipt 
 where datediff(month, datetimeInsert, getdate()) = 6

编辑1:@larnu的一个优点是,在DATEDIFF()函数中使用datetimeInsert列可以降低查询的sargeable,也就是说,它将无法利用索引。

您可以在不牺牲可裁剪性的情况下实现相同的效果:

代码语言:javascript
复制
select datetimeInsert, Part_no,qty
  from receipt 
 where datetimeInsert >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, DATEADD(MONTH, -7, GETDATE())))
   and datetimeInsert < DATEADD(DAY, 0, DATEDIFF(DAY, 0, DATEADD(MONTH, -6, GETDATE())));

注意:我刚刚意识到这第二个查询不只是查看月份,而是7到6个月前的时间段。因此,您将获得7到6个月前的结果,而不是当前月份之前6个月的结果。如果您需要后者(实际上与问题中的原始查询相同),您可以在@larnu's answer中找到解决方案。

编辑2:正如@Jeff评论的那样,使用像DATEADD(MONTH, -7, GETDATE())这样的表达式时的时间界限将是7个月前的时间界限,也就是今天这个确切时间的界限。我已经更新了上面的语句和下面的dbfiddle,以弥补这一点并突出显示不同之处。

参见db<>fiddle

票数 1
EN

Stack Overflow用户

发布于 2021-11-25 09:39:38

我认为你可以通过在你的查询中做一个小的改变来实现这一点。您可以使用=0,而不是<=6。这将为您提供最新的1个月数据。

所以查询看起来应该是这样的,

代码语言:javascript
复制
  select datetimeInsert, Part_no,qty
  FROM  RECEIPT 
  where 
  datediff(month, datetimeInsert, getdate()) = 0

如果需要last month数据,请使用= 1

喜欢,

代码语言:javascript
复制
select datetimeInsert, Part_no,qty
  FROM  RECEIPT 
  where 
  datediff(month, datetimeInsert, getdate()) = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70107355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档