У меня есть 2 таблицы: основная таблица APPLICATION, которая содержит основные данные, и таблица STATUSTRACKING, которая отражает изменения состояния основных данных в таблице APPLICATION.
Существует отношение 1: N междутаблица APPLICATION и таблица STATUSTRACKING.Ниже приведены примеры:
-- APPLICATION
SELECT A.ID, A.DECISIONON, A.APPLICATIONSTATUS_ID AS CURRENTSTATUS
FROM APPLICATION A
WHERE A.ID=1099;
Results:
ID DECISIONON CURRENTSTATUS
1099 5/05/2009 5
-- STATUS TRACKING
SELECT ST.ID, ST.APPLICATION_ID AS APP_ID, ST.APPLICATIONSTATUS_ID AS STATUS, ST.CREATEDATE
FROM STATUSTRACKING ST
WHERE ST.APPLICATION_ID=1099
ORDER BY ST.CREATEDATE DESC;
Results:
ID APP_ID STATUS CREATEDATE
44466 1099 5 5/05/2009
44458 1099 7 5/05/2009
10826 1099 8 21/07/2008
9770 1099 7 9/07/2008
4410 1099 3 9/05/2008
3814 1099 2 2/05/2008
3803 1099 1 2/05/2008
Проблема: мне нужно выбрать запись STATUSTRACKING с НАИБОЛЕЕ ПОСЛЕДНЕЙ ДАТОЙ для определенного состояния.Это моя попытка:
SELECT A.ID AS APP_ID, A.APPLICATIONSTATUS_ID AS CURR_ST, Z.ID AS ST_ID, Z.CREATEDATE, Z.APPLICATIONSTATUS_ID AS OLD_ST
FROM APPLICATION A, STATUSTRACKING Z
WHERE A.APPLICATIONSTATUS_ID in (5,6)
AND A.ID IN (337,1099,1404,9441)
AND Z.APPLICATIONSTATUS_ID = 7
AND Z.APPLICATION_ID=A.ID
ORDER BY A.ID ASC, Z.CREATEDATE DESC;
Results:
APP_ID CURR_ST ST_ID CREATEDATE OLD_ST
337 6 13978 17/08/2008 7
1099 5 44458 5/05/2009 7
1099 5 9770 9/07/2008 7
1404 6 15550 28/08/2008 7
9441 5 49271 3/06/2009 7
9441 5 46058 13/05/2009 7
Проблема заключается в дублировании строк.Я должен показывать только строку с НАИБОЛЕЕ ПОСЛЕДНИМИ CreateDate.В случае App_ID 1099 это будет следующая запись:
1099 5 44458 5/05/2009 7
Я, очевидно, не хочу исключать строки, которые не дублируются.
Я думал, что был справаотслеживать это утверждение, которое дает строку, которую я ищу:
SELECT A.ID, A.APPLICATION_ID, A.APPLICATIONSTATUS_ID, A.CREATEDATE
FROM (SELECT *
FROM STATUSTRACKING
WHERE APPLICATIONSTATUS_ID=7
AND APPLICATION_ID=1099
ORDER BY CREATEDATE DESC) A
WHERE ROWNUM = 1;
... но я не могу заставить ее работать с моим основным оператором выбора.
Набор результатов, который я хочу, должен выглядеть следующим образом:
APP_ID CURR_ST ST_ID CREATEDATE OLD_ST
337 6 13978 17/08/2008 7
1099 5 44458 5/05/2009 7
1404 6 15550 28/08/2008 7
9441 5 49271 3/06/2009 7
etc. ...
Я не эксперт по Oracle / SQL, поэтому любая помощь будет принята с благодарностью.