我需要使用SQL Server 2016根据我的表字段payDate获取最近2个月和上个月(去年)的记录。
假设我在2020年2月1日至2日运行查询。我需要从2019年12月,2020年1月以及2019年1月开始的月度数据。
这是什么SQL查询?是否有可能将所有这些情况结合在一起?
答案 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个月的完整月份。