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

4

2 回答 2

2

只需替换=>=

[Test].[dbo].[Tickets].[DateEntered] >= DATEADD(month, -1, GETDATE())

您当前的情况只会查找DateEntered一个月前恰好(以毫秒为单位)的行:)

于 2013-10-14T08:51:08.153 回答
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
于 2015-03-26T20:15:57.427 回答