Je viens d'essayer de faire une sous-requête corrélée à la clause FROM
d'une déclaration SELECT
dans Oracle, mais on m'a donné une erreur indiquant que je ne pouvais pas faire la corrélation (quelque chose à l'effet que Obs.pID
n'a pas été reconnu).Oracle sous-requête corrélée dans FROM liste
Est-ce que cela devrait fonctionner?
FROM ml.Person Person
JOIN ml.Obs ON Person.pID = Obs.pId
JOIN (SELECT ObsMax2.pId, ObsMax2.hdId
, MAX(ObsMax2.obsDate) as maxDate
FROM ml.Obs ObsMax2
WHERE ObsMax2.pId = Obs.pId
AND ObsMax2.obsDate < {?EndDate}
GROUP BY ObsMax2.pId, ObsMax2.hdId) ObsMax
ON Obs.pId = ObsMax.pId
AND Obs.hdId = ObsMax.hdId
AND Obs.obsDate = ObsMax.maxDate
Ma solution semble être d'en faire une sous-requête non corrélé, et ajouter des critères à la sous-requête qui l'empêche de courir complètement amok, amok, amu-- OOF Désolé.
Je préférerais à comprendre comment bien corrèle, cependant, si possible - le point de vue qui fonctionne comme ça sous_requête faut pour construire à jamais.
Vous voulez probablement factoriser la requête, non seulement résoudre ce problème que vous utilisez syntactique pour. Pensez à ajouter des éclaircissements à la question sur ce que vous essayez d'accomplir. – Alkini
@ David - « pédant » :-) @Alan - Je ne suis pas sûr à quel point je suis censé parler des entrailles de ce système. En général, j'utiliserais une vue intégrée qui effectue le regroupement par pID/hdID pour obtenir l'observation la plus récente - mais cela échoue si c'est en 2009 et que vous interrogez 2008. – SarekOfVulcan