SQL - 最大値の取得

ここに【data】というテーブルがありまする。

id version
1 2.01
2 1.01
3 1.02


ここから、versionが最大のレコードのidを取得する(この場合はversion2.01が最大なので、そのid=1返す)3通りのSQL文の書き方をメモメモ。

  • サブクエリでversionの最大値を取得して比較
SELECT id FROM data
WHERE version = (
  SELECT max(version)
  FROM data
  GROUP BY version
  );
  • versionの降順で並べ替えて一番上のレコードを取得
SELECT id FROM data
ORDER BY version DESC
LIMIT 1;
  • 自己参照でversionを比較
SELECT id FROM data d1
WHERE NOT EXISTS (
  SELECT version FROM data d2
  WHERE d2.version > d1.version
  );


データベースの環境依存でどれが良いとは一概には言えないらしい?
でも二番目のは余計なメモリを食うのでオススメできないとのこと。
三番目の自己参照が今回初耳でした★


めもめも。