SELECT
AI_636.PARENT_ID AS PART,
MAX(b.AP_1036) AS ESTEND,
MAX(a.AP_3222) AS ACTEND
FROM
AI_636
LEFT OUTER JOIN AI_665 a
ON
(
a.AP_1033 = AI_636.PARENT_ID
AND SUBSTR(a.AP_1028, 1, 4) >= '2000'
AND a.AP_1030 NOT IN ('994')
AND
(
a.AP_1033 NOT IN
(
SELECT AI_665.AP_1033 FROM AI_665 WHERE AI_665.AP_3222 IS NULL
)
)
)
JOIN AI_665 b
ON
(
b.AP_1033 = AI_636.PARENT_ID
AND SUBSTR(b.AP_1028, 1, 4) >= '2000'
)
GROUP BY AI_636.PARENT_ID
このクエリは、大きなクエリの一部であり、呼び出し全体の実行が非常に遅くなります。
基本的に、親操作があり、その下にいくつかの子操作があります。操作の推定終了日と実際の終了日は子レベルでのみ保存されるため、親レベルの終了日を導出するために、子レベルで最大の日付を見つけようとしています。私が遭遇する問題は、子操作が完了せず、終了日が NULL であり、MAX() 関数がこれらを無視する場合です。子操作テーブルをそれ自体に結合し、それを絞り込んで、兄弟がすべて非 NULL の終了日を持つ子操作のみを含めることで、これを回避しています。
NULL 以外の終了日を持つ子を持つ親操作の検索を最適化する方法はありますか?