分组,但我想看最后一项



假设我有以下记录:

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

如果 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相关联的最后一行是顺序的,那么您可以使用子查询来获取每个namemax(id)以及计数。使用该结果连接回您的表,您应该得到正确的最终结果。

最新更新