2013-10-14 42 views
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,將始終返回每票所有結果。這條線但是似乎並不不過還回的數據:SQL找回較上月

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

我相信這背後的邏輯是,它會抓住當前的日期,將其更改爲前一個月,然後比較該日期的方式正確與DateEntered,雖然我可能在這裏弄錯了。任何幫助將非常感激。

回答

2

只是>=

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

取代=您當前的情況看起來只爲行,其中DateEntered正是(以毫秒爲單位)一個月前:)

+0

爲什麼'='不起作用? – Christos

+0

啊,我覺得這會很傻!非常感謝Nenad。 – JimmyK

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