我正在重建的查询中有以下片段:
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
. 退回所有这些记录只是在之后立即丢弃它们似乎有点浪费