発生した日付に基づいて最新のイベントを取得する必要がある Oracle クエリを作成しています。
テスト ケースで正しく動作しているように見えるクエリが 2 つあります。
最初はサブクエリを使用して日付順にイベントを取得し、rownum を介して最初のレコードをプルします。
SELECT description FROM
(
SELECT description FROM tablename
WHERE ((event_type IN ('A','I','Y')) AND (meeting_date IS NOT NULL)
AND id='whatever')
ORDER BY meeting_date DESC
)
WHERE rownum = 1
2 つ目は、ランクを使用して同じ結果を達成します。
SELECT description FROM
(
SELECT description, RANK() OVER( ORDER BY meeting_date DESC) mtg_rank
FROM tablename
WHERE ((event_type IN ('A','I','Y')) AND (meeting_date IS NOT NULL)
AND id= 'whatever')
)
WHERE mtg_rank = 1
私にとって、事前に並べ替えられたrownumは十分に単純であり、それを使用します。rownum がソートの前に機能することを認識しているため、最初にサブセレクトで順序付けを行いました。
しかし、その考えで何かが欠けているかどうかはわかりませんか?
また、この場合のランクが推奨/ベストプラクティスなのか、それともクエリの意図を伝えるのに適しているのか疑問に思っていますか?