SQL获取上个月的所有结果

时间:2013-10-14 08:37:46

标签: sql tsql datetime getdate

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进行比较,尽管我可能会在这里弄错。任何帮助将不胜感激。

2 个答案:

答案 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