我有以下查询:
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 列值)。
当我运行上面的查询时,它会抛出 ORA-00904 错误,因为级别 2 的子查询引用了表名。所以我修改了查询,如下所示:
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。请让我知道我该怎么做?谢谢大家,普拉迪普