我有一個查詢返回月份1-12。 (INT)從這個月開始的SQL ORDER BY月份
有沒有辦法下令結果,從本月遞減?
例
3
4
5
6
7
8
9
10
11
12
1
2
謝謝!
編輯:到本月desc,我的意思是這個實際的月份。 MONTH(GETDATE())
我有一個查詢返回月份1-12。 (INT)從這個月開始的SQL ORDER BY月份
有沒有辦法下令結果,從本月遞減?
例
3
4
5
6
7
8
9
10
11
12
1
2
謝謝!
編輯:到本月desc,我的意思是這個實際的月份。 MONTH(GETDATE())
嘗試簡單的數學才能通過,如果本月越小則當前加12,不知道會有怎樣的性能影響...
Order By Case When month(dateColumn) < month(GetDate()) Then month(dateColumn) +12
ELSE month(dateColumn) END
你可以在裏面添加了一年排序的目的。讓他們的輸出是這樣的:
2010-03
2010-04
...
2011-01
2011-02
Pseduo代碼:
WHERE year >= 2010 AND month >= 3
不知道你的查詢或數據支持它雖然。
我無法添加幾年,它必須保持在一個月。 – user380432 2011-03-11 17:16:32
@user:您可以進行排序。僅僅因爲你添加了過濾器方法並不意味着它必須在你的結果中出現。 – 2011-03-11 17:18:09
那麼根據這個月的情況,我怎麼知道哪一個是第一個呢? – user380432 2011-03-11 17:19:16
布拉德的答案類似,增加了一年柱,然後
...
ORDER BY year, month
根據您想要執行的操作使用ASCending或DESCending排序修飾符。
如果你不添加年份,這是不可能的。理由是因爲無法確定哪一月或哪個月最先出現。
你有唯一的解決辦法只是通過YEAR
第一命令他們,然後通過MONTH
。
所以,除非你改變字段成DATE
格式或包含Year列,你不能做任何事情。除非你想按ID
安排;這是第一次進入。
因此,在短期:沒有YEAR
=沒辦法。
考慮你有一個月列在表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
在條件好多了執行成本的:
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
假設我們只處理12個條目,這也是一個很好的解決方案。 – 2011-03-11 17:22:02
那麼,其他假設是什麼呢? – 2011-03-11 17:23:34
甚至不知道,試圖獲得更多的細節。檢查我的答案的評論。 – 2011-03-11 17:25:18