再構築しているクエリから次のスニペットがあります。
LEFT JOIN (SELECT ACCOUNT_ID, LETTER_TYPE, LETTER_DATE, LETTER_ID
FROM (SELECT T1.ACCOUNT_ID, T2.LETTER_TYPE, T1.LETTER_DATE, T1.LETTER_ID,
DENSE_RANK() OVER (PARTITION BY T1.ACCOUNT_ID, T2.LETTER_TYPE
ORDER BY T1.LETTER_DATE DESC) AS RANK1
FROM tableOne T1
INNER JOIN tableTwo T2 ON T1.LETTER_ID = T2.LETTERID)
WHERE RANK1 = 1)
私は実際にこれまで扱ったことはありませんDENSE_RANK()
がPARTITION BY
、私の調査に基づくと、このケースは「このレコードのグループをACCOUND_IDとLETTER_DATEの降順で並べ替える」と解釈され、外側のSELECTはRANK=1のレコードのみを取得します。各アカウントに送信された最新のLETTER_IDを検索します。
私の質問は:A。それは正確な翻訳ですか?およびB.このクエリをこのようにネストする必要がないように、このクエリを書き換え/再構築する方法はありますか?
Bで意味するのは、最初にすべてのLETTER_IDを返し、次ににフィルタリングされるということWHERE RANK1 = 1
です。それらのすべてのレコードをすぐに破棄するためだけに返すのは、いくぶん無駄のように思えます