Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
sysaux
Member

Откуда: PST+1
Сообщений: 217
Есть такая исходная таблица, со след. структурой данных:

"Id""Task""StatusType""Post""RecordDate"
"352""6""2""""17-FEB-12 02.41.16.250165 PM"
"420""6""6""""20-FEB-12 04.08.54.489759 PM"
"421""6""5""""20-FEB-12 04.09.10.074259 PM"
"463""6""2""""22-FEB-12 10.59.41.789748 AM"
"141""6""2""""04-FEB-12 11.20.36.387851 AM"
"6""6""1""""14-DEC-11 01.58.37.385747 PM"
"302""6""5""""16-FEB-12 03.25.18.848106 PM"


Т.е. по одному WorkTask может быть нескоолько записей с разными StatusType и RecordDate-ами.
Моя задача - выбрать последнюю по времени запись по каждому WorkTask-у.
Пишу запрос:
SELECT b2.WorkTask, LAST_VALUE(b2.Id) OVER (PARTITION BY b2.WorkTask ORDER BY b2.RecordDate ASC) AS Status FROM TblStatuses b2 WHERE b2.WorkTask=6

Результат:
"WorkTask""Status"
"6""6"
"6""141"
"6""302"
"6""352"
"6""420"
"6""421"
"6""463"

Выводится id-шник не последнего статуса, а всех статусов по WorkTask-у.
Если меняю запрос на вот такой (изменен LAST_VALUE на FIRST_VALUE, и сортировка в окне):
SELECT b2.WorkTask, FIRST_VALUE(b2.Id) OVER (PARTITION BY b2.WorkTask ORDER BY b2.RecordDate DESC) AS Status FROM TblStatuses b2 WHERE b2.WorkTask=6

то все правильно, выводится id-шник последней записи по WorkTask-у:
"WorkTask""Status"
"6""463"
"6""463"
"6""463"
"6""463"
"6""463"
"6""463"
"6""463"

Что я делаю не так?
ОС: Win2k8R2 Eng, RDBMS: Щкфсду 11.2.0.1.0 x64
4 июл 12, 09:27    [12813652]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Не забывай, как (по умолчанию) определяется текущее окно
4 июл 12, 09:31    [12813665]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
sysaux
Member

Откуда: PST+1
Сообщений: 217
Вячеслав Любомудров
Не забывай, как (по умолчанию) определяется текущее окно

Текущее окно у меня определяется
PARTITION BY b2.WorkTask

Разве не так?
4 июл 12, 09:34    [12813677]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Не только
4 июл 12, 09:36    [12813688]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
sysaux,

Добавь поле recorddate и увидишь почему
4 июл 12, 10:00    [12813826]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
-2-
Member

Откуда:
Сообщений: 15330
sysaux
Моя задача - выбрать последнюю по времени запись по каждому WorkTask-у.
смахивает на агрегат. уж не из-за того ли возник вопрос, что не удалась попытка применить distinct к результатам.
4 июл 12, 10:05    [12813853]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
sysaux
Что я делаю не так?

rows between current row and unbounded following
4 июл 12, 10:29    [12814016]     Ответить | Цитировать Сообщить модератору
 Re: Разве есть разница между LAST_VALUE и FIRST_VALUE?  [new]
sysaux
Member

Откуда: PST+1
Сообщений: 217
andrey_anonymous,

Туплю, извините))
Всем ответившим - спасибо!
4 июл 12, 12:29    [12815190]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить