Выберите самые последние строки - последние 24 часа - PullRequest
0 голосов
/ 31 мая 2018

У меня есть таблица, которая выглядит следующим образом:

col1  | col2 | col3 | t_insert
---------------------------------
 1    | z     |     |2018-04-25 17:23:46.686816+10
 1    | zy    |     |2018-04-26 18:53:46.686816+10
 2    | f     |     |2018-04-26 19:23:46.686816+10
 3    | g     |     |2018-04-27 17:23:46.686816+10
 2    | z     |     |2018-04-27 18:23:46.686816+10   
 4    | z     |     |2018-04-27 20:13:46.686816+10

Где в столбце col1 есть повторяющиеся значения, которые я хочу выбрать по самой последней отметке времени, создать новый столбец (столбец col4) и вставить строку 'update'.

Если в столбце col1 нет повторяющихся значений, я хочу выбрать значение и вставить строку' new 'в столбец col4.

Также я хочу выбрать только те строки, которые имеют временную метку изпоследние 24 часа.

Ожидаемый результат: (Этот результат не отображает выбранные строки за последние 24 часа)

col1  | col2 | col3 | t_insert                     | col4   |
-------------------------------------------------------------
 1    | zy    |     |2018-04-26 18:53:46.686816+10 |update  |
 3    | g     |     |2018-04-27 17:23:46.686816+10 |new     |
 2    | z     |     |2018-04-27 18:23:46.686816+10 |update  | 
 4    | z     |     |2018-04-27 20:13:46.686816+10 |new     |

Заранее спасибо,

1 Ответ

0 голосов
/ 31 мая 2018

Хммм, здесь может помочь оконная функция:

select col, col2, col3, t_insert,
       (case when cnt > 1 then 'update' else 'new' end) as col4
from (select t.*,
             count(*) over (partition by col1) as cnt,
             row_number() over (partition by col1 order by t_insert desc) as seqnum
      from t
      where t_insert >= now() - interval '24 hour'
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...