2013-03-21 97 views
-3

说我有以下记录:GROUP BY,但我想看到的最后一个项目

Foo 
FOO 

我想获得的所有记录的列表,使得它们含有fooFOO列编组,但我想要显示最后一条记录而不是第一条记录。 GROUP BY似乎显示第一条记录。

TABLE: 

id, name 

Records: 
1, Foo 
2, FOO 

SQL: 
SELECT *, 
     COUNT(id) AS cnt 
FROM table_name 
GROUP BY name 
HAVING cnt > 1 

结果是:Foo。我需要FOO。

+0

什么是您的查询和结构? – 2013-03-21 20:00:47

+2

-1这个问题没有显示任何研究工作。 – Kermit 2013-03-21 20:01:40

+0

@Polish - 如果我放置表结构和SQL,它能帮助您理解我的问题吗?我宁愿写更简单的问题,也不愿用代码轰炸人,等等。它不会很有用。 – StackOverflowNewbie 2013-03-21 20:03:54

回答

2

如果 id列是连续的,那么为什么不直接使用子查询得到的结果:

select t1.id, 
    t1.name, 
    t2.cnt 
from yourtable t1 
inner join 
(
    SELECT max(id) id, 
    COUNT(id) AS cnt 
    FROM yourtable 
    GROUP BY name 
    HAVING cnt > 1 
) t2 
    on t1.id = t2.id 

SQL Fiddle with Demo

如果你只是想每个nameid相关联的最后一行是连续的,那么你可以使用子查询来获得max(id)每个name与计数一起。使用该结果回到您的表格,您应该得到正确的最终结果。

相关问题