2016-01-13 66 views
-1

我想找出一種方法來查詢最近12個完整的數據的月份,所以它會上升到上個月並忽略這個月。查詢最近12個月的數據,其中年份和月份是單獨的列

我之前做過這件事的時候,表格中有一個日期列,但我正在使用的這張新表格將日期分成兩個月份和年份列。

在SQL Server 2012中,我該如何解決這個問題?

在此先感謝。

示例數據:

CalendarYear CalendarMonth TotalSales 
2014   3    35.00 
2014   4    220.00 
2015   2    243.00 
2015   5    17.93 
2015   6    216.36 
2015   10    370.93 
2015   12    350.00 
2016   1    116.75 
2016   2    13.78 

所需的輸出(假設當前時間是在2016年2月):

CalendarYear CalendarMonth TotalSales 
2015   2    243.00 
2015   5    17.93 
2015   6    216.36 
2015   10    370.93 
2015   12    350.00 
2016   1    116.75 
+0

向我們展示樣本數據和願望輸出,這將有所幫助 –

+0

只需添加我正在使用的小片段。希望就夠了。 – kaiguy

回答

1

我假設日間部分總是本月的第一天。

WHERE 
    CONVERT(DATETIME, CalendarYear + '-' + CalendarMonth + '- 01') >= DATEADD(mm, -12, GETDATE()) 

上面假定列是字符串。下面我做了一個版本,其中的列是數字。

WHERE 
    CONVERT(DATETIME, CAST(CalendarYear AS NVARCHAR(4)) + '-' + CAST(CalendarMonth AS NVARCHAR(2)) + '-01') >= DATEADD(mm, -12, GETDATE()) 
+0

看起來它應該可以工作,但由於某些原因,轉換器給出了一些奇怪的日期。當我將CONVERT(DATETIME,CalendarYear +' - '+ CalendarMonth +' - 01')放入我的選擇項時,CalendarYear爲2015並且CalendarMonth爲11時,它將1905-07-19 00:00:00.000作爲輸出。 – kaiguy

+0

對不起,我認爲這些列是字符串。我編輯了答案來解決這個問題。 – Josh

+0

謝謝你一堆。這似乎工作。它沒有考慮到最近一個整月,但這是我應該能夠從這裏弄清楚的。 – kaiguy

0

你可以只適用相同的代碼/邏輯年份和月份你想要的數據。

where to_date(year || month, 'YYYYMM') 
    between add_months(trunc(sysdate, 'MM'), -12) and trunc(sysdate) 
+0

你正在使用哪個版本的SQL Server有trunc和sysdate? – UnhandledExcepSean

+0

是的,我在搜索時看到了答案,但我認爲這隻適用於Oracle。 – kaiguy