1

次のような単一のテーブルがあります。

Table: id, name

名前は何度も出てきます。私は、名前ごとに返される最適なクエリ、その最高の ID を見つけようとしています。

入力データ:

1, "a"
2, "a"
3, "b"
4, "a"
5", "b"

出力:

4, "a"
5, "b"

クエリの FROM 部分でサブクエリを使用してこれを行う方法を知っています。どうにかして早くできるといいな。

私は現在:

SELECT table.* 
FROM table, (SELECT MAX(id) maxid FROM table GROUP BY name) maxids 
WHERE table.id = maxids.maxid

もっと速い方法があるかどうか知りたいです!

4

1 に答える 1

5

自己結合を使用する理由は、これで問題なく動作するはずです。

select max(id), name
from yourtable
group by name

デモで SQL Fiddle を参照してください

最終結果に含める列がさらにある場合は、次を使用できます。

select t1.id, t1.name, t1.col1
from yourtable t1
inner join
(
  select max(id) id, name
  from yourtable
  group by name
) t2
  on t1.id = t2.id
  and t1.name = t1.name

あるいは:

select t1.id, t1.name, t1.col1
from yourtable t1
where t1.id in (select max(t2.id)
                from yourtable t2
                group by t2.name);

両方のデモで SQL Fiddle を参照してください

于 2012-11-29T23:12:26.980 に答える