Ich habe gerade versucht, eine korrelierte Unterabfrage in der FROM
-Klausel einer SELECT
-Anweisung in Oracle zu tun, aber mir wurde ein Fehler angezeigt, dass ich die Korrelation (etwas, dass Obs.pID
wurde nicht erkannt).Oracle korrelierte Unterabfrage in FROM-Liste
Sollte das funktionieren?
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
Meine Abhilfe scheint zu sein, es ist ein nicht-korrelierten Unterabfrage zu machen, und fügen Sie Kriterien für die Unterabfrage, die völlig Amok hält, Amok sie vom Laufen, amu-- oof Es tut uns leid.
Ich würde lieber herausfinden, wie man es richtig korreliert, obwohl, wenn möglich - die Ansicht, die wie diese Unterabfrage funktioniert, dauert ewig zu bauen.
Sie wahrscheinlich die Abfrage Refactoring wollen, nicht nur diese syntaktische Problem beheben Sie laufen in zu. Erwägen Sie, die Frage zu klären, was Sie erreichen möchten. – Alkini
@David - "Pedant" :-) @Alan - Ich bin nur nicht sicher, in welchem Umfang ich über die Interna dieses Systems sprechen soll. Normalerweise würde ich eine integrierte Ansicht verwenden, die die Gruppierung nach pID/hdID durchführt, um die neueste Beobachtung zu erhalten - aber das scheitert, wenn es in 2009 ist und Sie 2008 abfragen. – SarekOfVulcan