この副選択を回避する方法はありますか?私はこのクエリを可能な限り効率的にしようとしています。そうすることで、副選択を避けようとしています。
ID_NUMによってテーブル上で最後に置き換えられた行を探しています。
副選択は、最後に置き換えられた行のみを戻すように配置されています。これはそれを行うための最良の方法ですか?
クエリは私が望むように完全に機能するので、最後の小さな副選択まで無視してかまいません。
SELECT
A.ID_NUM,
A.DOB,
A.NAME,
A.REPLACED_TMESTMP
FROM MYTABLE A, MYTABLE B
WHERE
A.ID_NUM = B.ID_NUM
AND A.REPLACED_TMESTMP IS NOT NULL
AND B.REPLACED_TMESTMP IS NULL
AND A.DOB <> B.DOB
several other conditions...
AND A.REPLACED_TMESTMP
= (SELECT MAX(C.REPLACED_TMESTMP)
FROM MYTABLE C
WHERE C.ID_NUM = A.ID_NUM
AND A.REPLACED_TMESTMP IS NOT NULL
)
;
これが私が何をする必要があるかを理解するのに役立ついくつかの擬似コードです
Select all from table
where a duplicate ID number exists
that has an active row (no replaced time stamp)
and has an inactive row(s)
only bring back the most current replaced row for each ID num.