获取最近2个月(当前年度)和上个月(去年)的记录

时间:2020-01-07 04:42:58

标签: sql sql-server

我需要使用SQL Server 2016根据我的表字段payDate获取最近2个月和上个月(去年)的记录。

假设我在2020年2月1日至2日运行查询。我需要从2019年12月,2020年1月以及2019年1月开始的月度数据。

这是什么SQL查询?是否有可能将所有这些情况结合在一起?

3 个答案:

答案 0 :(得分:2)

则前两个月的payDate为:
A)高于或等于2个月前的第一天
B)低于当月的第一天。

与一年前的月份相似。

所以尝试这样的事情:

SELECT *
FROM YourTable
WHERE 
( 
      paidDate >= DATEADD(month, -2, DATEADD(month, DATEDIFF(month, 0, GetDate()), 0))
  AND paidDate <  DATEADD(month, DATEDIFF(month, 0, GetDate()), 0)
)
OR
( 
      paidDate >= DATEADD(month, -13, DATEADD(month, DATEDIFF(month, 0, GetDate()), 0))
  AND paidDate <  DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, GetDate()), 0))
)

答案 1 :(得分:1)

您可以尝试以下逻辑-

SELECT * 
FROM your_table
WHERE 
(
    YEAR(paidDate) = YEAR(DATEADD(MM,-1, getdate())) 
    AND 
    MONTH(paidDate) =  MONTH(DATEADD(MM,-1, getdate()))
)
OR
(
    YEAR(paidDate) = YEAR(DATEADD(MM,-2, getdate())) 
    AND 
    MONTH(paidDate) =  MONTH(DATEADD(MM,-2, getdate()))
)
OR
(
    YEAR(paidDate) = YEAR(DATEADD(MM,-13, getdate())) 
    AND 
    MONTH(paidDate) =  MONTH(DATEADD(MM,-13, getdate()))
)

答案 2 :(得分:1)

LukStorm在性能方面有更好的答案(我对此表示赞同)。但是,如果您需要完整的几个月并且不关心索引编制,那么我建议datediff()

where datediff(month, paiddate, getdate()) in (1, 2, 13)

这将获得过去1个月,2个月和13个月的完整月份。