2010-07-20 80 views
1

我期望從表中獲取第一行(按date降序排列),然後獲取其餘行(按last_name升序排列)。我假設我需要爲此使用UNION語句,但我無法使其工作。2來自同一個表的SQL查詢

在此先感謝

+0

是「日期」,本身保證是唯一的? – Wrikken 2010-07-20 20:27:22

+0

你的表格結構是什麼?你有PK嗎? – 2010-07-20 20:27:46

+0

日期不是唯一的,因爲它是從日期格式導入的時間戳。是的,我有一個名爲「id」的PK。 – Dylan 2010-07-20 20:31:10

回答

2
SELECT * 
FROM yourtable 
ORDER BY 
    id = (SELECT id FROM yourtable ORDER BY date DESC LIMIT 1) DESC, 
    last_name 
+1

我喜歡「按計算布爾標誌排序」技巧。 – 2010-07-20 20:31:06

+0

它似乎有效。謝謝你的幫助! – Dylan 2010-07-20 20:35:37

2

爲什麼不運行兩個查詢?這似乎是一個明顯的答案。

不是每個任務都需要在單個查詢中完成。你是否也在一個語句中編寫了所有的PHP代碼? ;-)

+0

我知道單獨做這件事情會更有意義(我通常會這樣做),但是如果沒有太多細節的話,如果在1個查詢中有辦法做到這一點,那將會容易得多。 – Dylan 2010-07-20 20:28:46

2

使用MySQL的假設,你可以使用:

(SELECT t.* 
    FROM TABLE t 
ORDER BY t.date DESC 
    LIMIT 1) 
UNION 
(SELECT t.* 
    FROM TABLE t 
ORDER BY t.last_name) 

您需要封裝在括號中的語句來應用ORDER BY - 否則,ORDER BY被應用到UNION後的結果集。

+0

這將包括第一行兩次,一次在頂部,再次低一些,這是海報可能不想要的。 – 2010-07-20 20:36:40

+1

@斯科特斯塔福德:不,它不會因爲聯盟刪除重複。如果它是'UNION ALL',那麼你會是對的# – 2010-07-20 20:37:46

+0

有趣......每天學點東西。謝謝。 – 2010-07-20 20:55:14