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 结束日期的子项的父操作的搜索?