2011-03-11 52 views
0

我有一個查詢返回月份1-12。 (INT)從這個月開始的SQL ORDER BY月份

有沒有辦法下令結果,從本月遞減?

3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
1 
2 

謝謝!

編輯:到本月desc,我的意思是這個實際的月份。 MONTH(GETDATE())

回答

3

嘗試簡單的數學才能通過,如果本月越小則當前加12,不知道會有怎樣的性能影響...

Order By Case When month(dateColumn) < month(GetDate()) Then month(dateColumn) +12 
ELSE month(dateColumn) END 
+0

假設我們只處理12個條目,這也是一個很好的解決方案。 – 2011-03-11 17:22:02

+0

那麼,其他假設是什麼呢? – 2011-03-11 17:23:34

+0

甚至不知道,試圖獲得更多的細節。檢查我的答案的評論。 – 2011-03-11 17:25:18

2

你可以在裏面添加了一年排序的目的。讓他們的輸出是這樣的:

2010-03 
2010-04 
... 
2011-01 
2011-02 

Pseduo代碼:

WHERE year >= 2010 AND month >= 3 

不知道你的查詢或數據支持它雖然。

+0

我無法添加幾年,它必須保持在一個月。 – user380432 2011-03-11 17:16:32

+0

@user:您可以進行排序。僅僅因爲你添加了過濾器方法並不意味着它必須在你的結果中出現。 – 2011-03-11 17:18:09

+0

那麼根據這個月的情況,我怎麼知道哪一個是第一個呢? – user380432 2011-03-11 17:19:16

0

布拉德的答案類似,增加了一年柱,然後

... 
ORDER BY year, month 

根據您想要執行的操作使用ASCending或DESCending排序修飾符。

0

如果你不添加年份,這是不可能的。理由是因爲無法確定哪一月或哪個月最先出現。

你有唯一的解決辦法只是通過YEAR第一命令他們,然後通過MONTH

所以,除非你改變字段成DATE格式或包含Year列,你不能做任何事情。除非你想按ID安排;這是第一次進入。

因此,在短期:沒有YEAR =沒辦法。

1

考慮你有一個月列在表1,2,3,...,11,12值

SELECT *, case when `month`>=3 then `month` 
      else `month`+12 end as `temp_month` 
      FROM `tbl_name` order by `temp_month` 

你會得到輸出如下

3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
1 
2 
0

在條件好多了執行成本的:

Select * From 
Group By monthcolumn,firstname,lastname 
ORDER BY DATEPART(YEAR,datecolumn) DESC, DATEPART(MONTH, datecolumn) DESC 

或者說,這個人是在執行成本方面有點小貴:

Select * From 
Group By monthcolumn ,firstname,lastname  
ORDER BY CASE WHEN (DATEPART(MONTH, datecolumn))=3 THEN 1 
       WHEN (DATEPART(MONTH, datecolumn))=2 THEN 2 
       WHEN (DATEPART(MONTH, datecolumn))=1 THEN 3 
       WHEN (DATEPART(MONTH, datecolumn))=12 THEN 4 
       WHEN (DATEPART(MONTH, datecolumn))=11 THEN 5 
       WHEN (DATEPART(MONTH, datecolumn))=10 THEN 6 
       ELSE 0 END 
       ASC