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
Diese Abfrage ist ein kleiner Teil eines größeren und führt dazu, dass der gesamte Aufruf sehr langsam ausgeführt wird.Optimieren einer InterBase-Abfrage
Im Grunde gibt es eine übergeordnete Operation und dann mehrere untergeordnete Operationen darunter. Die geschätzten vs. tatsächlichen Enddaten der Operationen werden nur auf der untergeordneten Ebene gespeichert. Um eine für die übergeordnete Ebene ableiten zu können, versuche ich, die größten Daten auf der untergeordneten Ebene zu finden. Das Problem, auf das ich stoße, ist, wenn eine untergeordnete Operation nicht abgeschlossen ist, ein NULL-Enddatum vorliegt und die Funktion MAX() diese ignoriert. Ich umgehe das, indem ich die child-operations-Tabelle mit sich selbst verknüpfe und sie auf nur untergeordnete Operationen beschränke, deren Geschwister alle nicht-NULL-Enddaten haben.
Gibt es eine Möglichkeit, die Suche nach übergeordneten Operationen mit Kindern mit nicht-NULL Enddaten zu optimieren?
nie mit ınterbase gearbeitet, aber die DISTINCT ist wahrscheinlich irrelevant wegen der 'GROUP BY' –
Sie haben Recht, ich habe meine Anfrage ein wenig aktualisiert und entfernt. – TheJubilex