最大値のレコードを取得する方法 その2
以前
http://d.hatena.ne.jp/niwanos/20090501/1241195931
みたいに最大値のレコード取得の方法を書いてましたが
Oracleのマニュアルにこれよりもスマートな方法が書いてあったのでちょっと紹介します。
前回は
SELECT LOG.* FROM LOG_TABLE LOG WHERE LOG.ID IN ( SELECT MAX(L.ID) ID FROM LOG_TABLE L GROUP BY L.LOG_ID)
な感じで最大レコードを取得していたのですが
OVERを使う方法もあるそうです
SELECT MAX_LOG.ID ,MAX_LOG.LOG_ID ,MAX_LOG.NAME ,MAX_LOG.REGISTER_DATE FROM (SELECT ID ,LOG_ID ,NAME ,REGISTER_DATE ,MAX(ID) OVER(PARTITION BY LOG_ID) MAX_ID FROM LOG_TABLE LOG) MAX_LOG WHERE MAX_LOG.MAX_ID = MAX_LOG.ID
これだと同じテーブルを2回SELECTしなくて済むので多少はやいかもしれません
うちの環境だとコストが 前のだと5、今回ので4になったので1だけ早い結果でした