SQL返回上个月的所有结果

SQL返回上个月的所有结果,sql,tsql,datetime,getdate,Sql,Tsql,Datetime,Getdate,我正在尝试创建一个存储过程,该存储过程将始终根据输入的列DateEntered返回上个月的每张票证。然而,这一行似乎永远不会返回数据: SELECT * FROM [Test].[dbo].[Tickets] INNER JOIN [Test].[dbo].[Movies] ON [Test].[dbo].[Tickets].[ConnectedTo] = [Test].[dbo].[Movies].[MovieID] WHERE [Test].[dbo].[Mov

我正在尝试创建一个存储过程,该存储过程将始终根据输入的列DateEntered返回上个月的每张票证。然而,这一行似乎永远不会返回数据:

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())

我相信它背后的逻辑是正确的,它将获取当前日期,将其更改为上个月,然后将该日期与输入的日期进行比较,尽管我可能会在这里出错。任何帮助都将不胜感激。

只需将
=
替换为
=

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

您当前的条件将只查找
DateEntered
正好(以毫秒为单位)在一个月前的行:)

我不确定选择的答案是否是实现这一点的最佳方法。如果您在本月13日运行报告,它只会提供从上个月13日到报告运行的准确时间的所有记录

所以你想要类似的东西。如果月份是
一月
,您需要小心,因为这样我们就需要上一年以及上一个月

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

啊,我想这会很愚蠢!非常感谢你,尼纳德。
-- 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