2011-03-09 43 views
2

我有表結構這樣選擇所有最新的記錄不同

sn | person_id | image_name | 

    1 | 1   |  abc1.jpb 
    2 | 1   |  aa11.jpg 
    3 | 11  |  dsv.jpg 
    4 | 11  |  dssd.jpg 
    5 | 11  |  sdf.jpg 

我需要不同的爲person_id最新行如下

2 | 1   | aa11.jjpb 
    5 | 11   | sdf.jpg 

這是可能的嗎?

回答

4
SELECT * FROM yourtable GROUP BY person_id ORDER BY sn DESC 

基本上你想從表中選擇所有記錄。然後,它通過爲person_id(限制的結果,以每人1 ID)分組...排序方式SN decending意味着它將返回最近的(最高)SN

更新:(和驗證)

SELECT * FROM (SELECT * FROM stackoverflow ORDER BY sn DESC) a GROUP BY person_id ORDER BY sn 
+0

SELECT * FROM yourtable GROUP BY爲person_id ORDER BY SN DESC 本聲明列出結果的降值。所以還是沒有得到我想要的東西 – 2011-03-09 13:51:15

+0

修正爲期望在希望的順序結果... – CarpeNoctumDC 2011-03-09 14:08:54

+0

SELECT * FROM(SELECT * FROM stackoverflow ORDER BY sn DESC)GROUP BY person_id 謝謝CarpeNoctumDC現在這個工作正常工作 – 2011-03-15 08:01:03

5
SELECT * FROM table GROUP BY person_id HAVING MAX(sn) 

編輯

SELECT f.* 
FROM (
     SELECT person_id, MAX(sn) as maxval 
     FROM table GROUP BY person_id 
    ) AS x INNER JOIN table AS f 
ON f.person_id = x.person_id AND f.sn = x.maxval; 

其中表是你的表名。

+0

Upvoted for MAX ... LOL凌晨早上想直連 – CarpeNoctumDC 2011-03-09 13:37:05

+0

SELECT * FROM表GROUP BY person_id HAVING MAX (sn) 1 | 1 | abc1.jpb 4 | 11 | dssd.jpg 不工作仍顯示舊行 – 2011-03-09 13:45:39

+0

@ G-Rajendra:對不起。我無法到達這裏。檢查更新後的答案是否有效。 – 2011-03-10 05:08:54

0
SELECT * FROM table a WHERE a.`id` = (SELECT MAX(`id`) FROM table b WHERE b.`person_id` = a.`person_id`); 

您在括號裏面做什麼選擇最大id爲具有不同person_id行。因此,對於每個唯一的person_id,您將獲得最新的條目。