2015-11-10 3 views
0

У меня есть существующий запрос, который отображает данные, как это:Как получить последнюю строку по дате?

NAME  COURSE PROF LASTUPDATE 
NAME_1 MATH1 PROF_A 2015-10-14 09:55:26.637 
NAME_2 ENG1  PROF_B 2015-10-14 09:54:07.087 
NAME_2 ENG1  PROF_C 2015-10-14 10:02:31.663 
NAME_3 SOC1  PROF_D 2015-10-14 09:53:28.253 
NAME_4 PHL1  PROF_E 2015-10-14 09:55:47.293 
NAME_3 SOC1  PROF_F 2015-10-14 09:59:00.000 

Я хочу выбрать только самые последние строки (в терминах lastupdate) с тем же именем и, конечно? Итоговая таблица должна быть такой:

NAME  COURSE PROF LASTUPDATE 
NAME_1 MATH1 PROF_A 2015-10-14 09:55:26.637 
NAME_2 ENG1  PROF_C 2015-10-14 10:02:31.663 
NAME_4 PHL1  PROF_E 2015-10-14 09:55:47.293 
NAME_3 SOC1  PROF_F 2015-10-14 09:59:00.000 

Заранее благодарю вас!

ответ

1

Типичный метод row_number():

select t.* 
from (select t.*, 
      row_number() over (partition by name, course order by lastupdate desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
+0

Выглядит хорошо, возможно, добавить 'course' в' раздела by' ... – sgeddes

+0

@sgeddes. , , «с тем же именем ** и курсом **» (моя подсветка). Благодарю. –

+0

Другой вопрос. Я собираюсь применить это к существующему запросу, который использует «с CTE». Вот где я собираюсь получить свой «ОТ». Это будет выглядеть следующим образом: SELECT T. * FROM (с CTE (...)) Т. Однако я получаю сообщение об ошибке, которое говорит о некорректном синтаксисе рядом с ключевым словом 'with'. Есть ли способ интегрировать запрос, предложенный в моем существующем запросе? – Peter

0

попробовать FIRST_VALUE

select 
first_value(last_update) over (partition by name_2 order by last_update DESC) as last_update 
from my_table; 
Смежные вопросы