2013-07-24 86 views
0
SELECT 
MAX('time'), c_id, message, state, time 
FROM message 
WHERE receive = 1 
GROUP BY c_id 

我有一個mysql查詢,我嘗試選擇每個組的最後一行,但它不工作。Mysql爲每個組選擇最後一行

c_id是組。它現在選擇每個組的第一行。

+1

可以顯示一些示例數據嗎? –

+1

定義「最後一行」。定義「不工作」。 –

回答

11

首先,您不應該使用單引號轉義列名,因爲它不是字符串文字。
其次,你可以做子查詢,每個子查詢分別獲得每個c_id的最新時間,並將它與原始表加入以獲取其他列。

SELECT a.* 
FROM message a 
     INNER JOIN 
     (
      SELECT c_id, MAX(time) time 
      FROM message 
      GROUP BY c_id 
     ) b ON a.c_id = b.c_id AND 
       a.time = b.time 

SELECT a.* 
FROM message a 
WHERE a.time = 
     (
      SELECT MAX(time) time 
      FROM message b 
      WHERE a.c_id = b.c_id 
     ) 
+1

+1爲第一個解決方案。 -1爲第二。 YUK! – Strawberry

+1

@Strawberry第二個解決方案來自MySQL文檔。 http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html –

+0

...這是第一個,但第一個是數量級更快! – Strawberry

0

感謝名單吳宇森!

SELECT a.* FROM survey_question_option a INNER JOIN (
    SELECT subordinate_question, MAX(sort) sort 
    FROM  survey_question_option 
    WHERE  question_id=14 
    GROUP BY subordinate_question 
) b ON ((a.subordinate_question = b.subordinate_question) OR (a.subordinate_question IS NULL AND b.subordinate_question IS NULL)) AND 
a.sort = b.sort AND a.question_id=14;