-3

次のレコードがあるとします。

Foo
FOO

fooとを含む列でグループ化されたすべてのレコードのリストを取得しFOOたいのですが、最初のレコードではなく最後のレコードを表示したいです。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が必要です。

4

1 に答える 1

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を参照してください。

each に関連付けられた最後の行だけが必要でnameidが連続している場合は、サブクエリを使用してmax(id)for eachnameとカウントを取得できます。その結果を使用してテーブルに結合すると、正しい最終結果が得られるはずです。

于 2013-03-21T20:21:34.587 に答える