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正確に(ミリ秒単位で)1か月前の行のみを探します:)

于 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 に答える