|
Тема |
Първата NOT NULL стойност от група записи |
|
Автор |
VladoVasilev (минаващ) |
|
Публикувано | 30.06.06 12:18 |
|
|
Здравейте!
Имам следната таблица TBL_LOGS(ID INTEGER NOT NULL, CHANGED DATE NOT NULL, STATUS INTEGER, TYPE CHAR(3)) и следните примерни данни в нея:
SELECT * FROM TBL_LOGS ORDER BY ID, CHANGED ASC;
ID CHANGED STATUS TYPE
--------------------------------------------------------------
1 | 28.06.2006 17:18:51 | |
1 | 28.06.2006 18:34:31 | 2 |
1 | 28.06.2006 19:00:01 | 3 | ABC
1 | 29.06.2006 08:12:22 | -1 | SUC
2 | 28.06.2006 09:47:54 | | SUC
2 | 28.06.2006 11:05:06 | |
2 | 28.06.2006 14:33:29 | | UER
--------------------------------------------------------------
Трябва ми заявка, която за всяко различно ID да извлича по един запис,
така че в него да има колоната ID, първата стойност на колоната STATUS за съответната група от еднакви ID-та,
която не е NULL или ако няма такава - [-10], както и първата стойност на колоната TYPE за съответната група от еднакви ID-та, която не е NULL или ако няма такава - NULL. Под "първата" имам впредвид наредба по CHANGED в нарастващ ред за съответната група ID-та или "ORDER BY CHANGED ASC"
Или за конкретния пример, заявката трябва да бъде :
SELECT ID, SOME_FUNC_NOT_NULL_STATUS(), SOME_FUNCT_NOT_NULLTYPE()
FROM TBL_LOGS GROUP BY ID;
и очаквания резултат е :
ID STATUS TYPE
--------------------------------------------------------------
1 2 ABC
2 -10 SUC
--------------------------------------------------------------
Аз пробвах с аналитични функции от рода на FIRST_VALUE(STATUS) over (ORDER BY CHANGED ASC), но не можах да игнорирам NULL-стойностите. Много важна подробност е версията - ползвам Oracle9.....четох че в Oracle10 има FIRST_VALUE(COLUMN_NAME IGNORE NULLS), което щеше да ми даде точно желания резултат, но за жалост не мога да го използвам. Помагайте!
Редактирано от VladoVasilev на 30.06.06 12:20.
|
| |
|
|
|