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,您将获得最新的条目。