1

FROMOracleのステートメントの句で相関サブクエリを実行しようとしましたが、相関を実行SELECTできないことを示すエラーが表示されました (Obs.pID認識されなかった効果の何か)。

これは機能するはずですか?

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

私の回避策は、それを相関関係のないサブクエリにし、完全に実行されないようにする基準をサブクエリに追加することのようです。

ただし、可能であれば、それを適切に関連付ける方法を見つけたいと思います-そのサブクエリのように機能するビューは、構築に永遠にかかります。

4

3 に答える 3

5

クエリのこの部分の目的は、分析関数を使用して各 pid と hdid の最大 obsDate を特定することで実現できます。

次のようになります。

select ...
from   (
       SELECT pId,
              hdId,
              obsDate
              MAX(obsDate) over (partition by pId, hdId) maxDate
       FROM   ml.Obs
       WHERE  obsDate < {?EndDate}
       )
where  obsDate = maxDate
/
于 2009-03-05T02:38:52.953 に答える