繁体   English   中英

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

[英]Get records of last 2 months (current year), and last month(last year)

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

假设我在 2020 年 2 月 1 日/2 日运行查询。我需要 2019 年 12 月、2020 年 1 月以及 2019 年 1 月的月度数据。

对此的 SQL 查询是什么? 是否有可能将所有这些场景合二为一?

然后在前 2 个月的paidDate 将是:
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))
)

LukStorm 在性能方面有更好的答案(我已经赞成)。 但是如果你想要完整的月份并且不关心索引,那么我建议datediff()

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

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

您可以尝试以下逻辑-

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()))
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM