SELECT *
FROM
[Test].[dbo].[Tickets]
INNER JOIN
[Test].[dbo].[Movies]
ON
[Test].[dbo].[Tickets].[ConnectedTo] = [Test].[dbo].[Movies].[MovieID]
WHERE
[Test].[dbo].[Movies].[Moviename] like '%K%'
AND [Test].[dbo].[Tickets].[DateEntered]= DATEADD(month, -1, GETDATE())
我正在尝试创建一个存储过程,该存储过程将始终根据DateEntered列返回上个月的每个票证。然而,这一行似乎并没有返回数据:
[Test].[dbo].[Tickets].[DateEntered]= DATEADD(month, -1, GETDATE())
我相信它背后的逻辑是正确的,它将获取当前日期,将其更改为上个月,然后将该日期与DateEntered进行比较,尽管我可能会在这里弄错。任何帮助将不胜感激。
答案 0 :(得分:2)
只需将=
替换为>=
[Test].[dbo].[Tickets].[DateEntered] >= DATEADD(month, -1, GETDATE())
您的当前状况仅适用于一个月前DateEntered
正好(以毫秒为单位)的行:)
答案 1 :(得分:0)
我不确定所选答案是否是达到此目的的最佳方法。如果您在当月13日运行报告,它只会为您提供从上个月13日开始直到报告运行的确切时间的所有记录。
因此你想要类似的东西。如果月份为January
,您需要小心,因为我们需要上一年和上个月。
-- If the month is January we need to select the previous year, otherwise current year
IF MONTH(GETDATE()) = 1
BEGIN
YEAR([DateEntered]) = YEAR(DATEADD(y, -1, GETDATE())) AND MONTH([DateEntered]) = MONTH(DATEADD(m, -1, GETDATE())
END
ELSE
BEGIN
YEAR([DateEntered]) = YEAR(GETDATE()) AND MONTH([DateEntered]) = MONTH(DATEADD(m, -1, GETDATE())
END