最大値のレコードを取得する方法 その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だけ早い結果でした