2014-08-30 387 views
1

我有一系列的日期的事件,如下所示:MySQL的ORDER BY兩次(由相同的字段)

  • 事件1,2014年1月1日
  • 事件2,2014年1月2日
  • Event 3,1/3/2014

說我想要按照時間順序排列最近的兩個事件。如果我跑:

SELECT * FROM 'table_name' ORDER BY 'Date' ASC LIMIT 2

我會得到以下結果:

  • 事件1,2014年1月1日
  • 事件2,2014年1月2日

但這是不正確的,因爲事件3是最近的事件。所以,我因此改變ASC到DESC:

SELECT * FROM 'table_name' ORDER BY 'Date' DESC LIMIT 2

我得到如下結果:

  • 事件3,2014年1月3日
  • 事件2,2014年1月2日

這是正確的結果集,但它們倒退了。我想最近的活動持續了......但我不能簡單地第二次使用ORDER BY 'Date'。有沒有辦法來限制我的結果(通過LIMITORDER BY,然後對剩餘的效果,請使用第二ORDER BY

任何幫助,非常感謝!

+1

這是MySQL的,所以這些都不是日期;-) – Strawberry 2014-08-30 22:05:40

+0

如此,儘管我覺得這不是日期時間表示法更具可讀性。我不認爲這個符號和這個概念一樣重要,這個概念是兩次排序的。 – Jake 2014-08-30 22:08:14

+1

傑克,@Strawberry提出了一個很好的觀點。你不應該以這種格式存儲日期,因爲按字符串日期而不是日期時間字段排序意味着你將得到不正確的結果。如果你想知道如何以及爲什麼我可以給你看...但作爲一條經驗法則,最好將數據存儲爲它的存儲數據類型:) – 2014-08-30 22:31:09

回答

3

更快的方法是隻做一個選擇。請使用UNION語法再次訂購。試試看!

(SELECT * 
FROM events 
ORDER BY date DESC 
LIMIT 2 
)ORDER BY date ASC; 

DEMO

0

其實,你可以

SELECT * FROM (
SELECT * FROM 'table_name' ORDER BY 'Date' DESC LIMIT 2 
) 
ORDER BY 'Date' ASC 
+0

,不需要做兩個選擇......並且如果您運行它,此查詢將引發錯誤 – 2014-08-30 22:21:52

1
SELECT * 
FROM (SELECT * FROM events ORDER BY date DESC LIMIT 2) AS table_alias 
ORDER BY date ASC 

你需要有一個表別名,一個子查詢

乾杯

+0

+1用於發佈使用子查詢的正確語法:) – 2014-08-30 22:35:29

相關問題