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
Cette requête est une petite partie d'une requête plus importante qui provoque l'exécution de l'appel entier très lentement.Optimisation d'une requête InterBase
Fondamentalement, il y a une opération parent puis plusieurs opérations enfants en dessous. Les dates de fin estimées et réelles des opérations ne sont stockées qu'au niveau de l'enfant, donc pour en déduire un pour le niveau parent, j'essaie de trouver les dates les plus importantes au niveau de l'enfant. Le problème que je rencontre est quand une opération enfant n'est pas terminée, il a une date de fin NULL, et la fonction MAX() les ignore. Je contourne cela en joignant la table des opérations enfants à elle-même et en la réduisant pour inclure uniquement les opérations enfants dont les frères et sœurs ont tous des dates de fin non NULL.
Est-il possible d'optimiser la recherche d'opérations parentes avec des enfants avec des dates de fin non NULL?
jamais travaillé avec ınterbase, mais le DISTINCT est probable non pertinent en raison du 'GROUP BY' –
Vous avez raison, j'ai mis à jour ma requête un peu et l'ai enlevé. – TheJubilex