Новое значение повторяющегося столбца на основе максимального значения из другого столбца - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть таблица 'mytable', результаты которой аналогичны приведенным ниже

currenttime             racetype            raceid
2018-01-01 03:15:00     gold                22
2018-01-01 04:15:00     silver              22
2019-01-01 04:15:00     bronze              22
2017-01-02 11:44:00     platinum            22

Я пытаюсь создать другой столбец на основе максимального текущего времени.Он должен получить значение racetype из максимального текущего времени и повторить эту запись для всех элементов в новом столбце, аналогично приведенному ниже

currenttime             racetype          raceid     besttype
2018-01-01 03:15:00     gold              22         bronze
2018-01-01 04:15:00     silver            22         bronze
2019-01-01 04:15:00     bronze            22         bronze
2017-01-02 11:44:00     platinum          22         bronze

И если есть другие идентификаторы расы, он должен сделать то же самое для техex

currenttime             racetype          raceid     besttype
2018-01-01 03:15:00     gold              22         bronze
2018-01-01 04:15:00     silver            22         bronze
2019-01-01 04:15:00     bronze            22         bronze
2017-01-02 11:44:00     platinum          22         bronze
2011-01-01 03:15:00     gold              09         silver
2022-01-01 04:15:00     silver            09         silver
2002-01-01 04:15:00     bronze            09         silver

В настоящее время у меня есть запрос

select mt.raceid, tt.racetype, MAX(tt.currenttime) 
OVER (PARTITION by mt.raceid) 
from mytable mt 
join tabletwo tt on mt.id = tt.id
where mt.raceid = 22

Этот запрос не выводит ожидаемый, он выводит

raceid         racetype         col0
22             gold             2019-01-01 04:15:00 
22             silver           2019-01-01 04:15:00 
22             platinum          2019-01-01 04:15:00 
22             bronze           2019-01-01 04:15:00 

Как я могу достичь вышеожидаемые результаты, показанные во 2-м и 3-м примерах?

1 Ответ

0 голосов
/ 20 февраля 2019

Использование first_value аналитическая функция:

select currenttime, racetype, raceid,
       first_value(racetype) over(partition by raceid order by currenttime desc) as besttype
  from mytable

Или last_value:

select currenttime, racetype, raceid,
           last_value(racetype) over(partition by raceid order by currenttime) as besttype
  from mytable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...