У меня следующий запрос:
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 на основании следующих условий:
- Состояние пакетов должно быть "Отправлено". (Указывается установкой столбца PACKAGESTATUS в PACKAGE_STATISTICSto 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 Неверный идентификатор.
Пожалуйста, дайте мне знать, как я могу это сделать?
Спасибо вам всем,
Прадип