次のクエリがあります。
SELECT SP.PACKAGEID,SP.ORDERID,PTS.CREATIONDATE AS SHIPPEDDATE
FROM PACKAGES SP
INNER JOIN
(
SELECT * FROM
(
SELECT *FROM PACKAGE_STATISTICS A
WHERE((A.PACKAGEID=SP.PACKAGEID)
AND(A.PACKAGESTATUS=2)
AND(TO_DATE(to_char(A.CREATIONDATE,'mm/dd/yyyy'),'mm/dd/yyyy')
BETWEEN TO_DATE('2/19/2011','mm/dd/yyyy') AND (TO_DATE('3/21/2011','mm/dd/yyyy'))))
ORDER BY A.CREATIONDATE
) WHERE ROWNUM<2
) PTS ON PTS.PACKAGEID=SP.PACKAGEID
WHERE SP.ISSUEID IN(402783)
このクエリは、次の条件に基づいて、PACKAGES テーブルからパッケージの詳細を選択します。
- パッケージのステータスは「出荷済み」でなければなりません。 (PACKAGE_STATISTICS の PACKAGESTATUS 列を 2 に設定することで示されます)
- パッケージに複数の「出荷済み」エントリがある場合は、(CREATIONDATE 列の値に基づいて) 最新のものを選択します。
上記のクエリを実行すると、レベル 2 のサブクエリがテーブル名を参照するため、ORA-00904 エラーがスローされました。そのため、以下のようにクエリを変更しました。
SELECT SP.PACKAGEID,SP.ORDERID, (SELECT CREATIONDATE FROM
(
SELECT *FROM PACKAGE_STATISTICSA
WHERE
((A.PACKAGEID=SP.PACKAGEID)
AND(A.PACKAGESTATUS=2)
AND(TO_DATE(to_char(A.CREATIONDATE,'mm/dd/yyyy'),'mm/dd/yyyy')
BETWEEN TO_DATE('2/19/2011','mm/dd/yyyy') AND (TO_DATE('3/21/2011','mm/dd/yyyy'))))
ORDER BY A.CREATIONDATE
) WHERE ROWNUM<2) AS SHIPPEDDATE
FROM PACKAGESSP
WHERE
(SHIPPEDDATE BETWEEN TO_DATE('2/19/2011','mm/dd/yyyy')
AND (TO_DATE('3/21/2011','mm/dd/yyyy')))
AND SP.ISSUEID IN(402783)
ORA-00904 SHIPPEDDATE Invalid Identifier が再びスローされました。どうすればこれを行うことができますか教えてください。ありがとう、プラディープ