[英]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.