Максимальная разница между временными метками обновления - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть таблица:

id | updated_at
1  | 2018-10-22T21:00:00Z
2  | 2018-10-22T21:02:00Z

Я бы хотел найти наибольшую дельту за данный день между ближайшими обновленными временными метками.Например, если было 5 строк:

id | updated_at
1  | 2018-10-22T21:00:00Z
2  | 2018-10-22T21:02:00Z
3  | 2018-10-22T21:05:00Z
4  | 2018-10-22T21:06:00Z
5  | 2018-10-22T21:16:00Z

Наибольшая дельта составляет от 4 до 5 (10 минут).Обратите внимание, что при сравнении я просто хочу найти следующую ближайшую отметку времени updated_at, а затем дать мне max этого.Мне кажется, что я испортил подзапрос, чтобы сделать это.

 with nearest_time(time_diff)
 as
 (
   select datediff('minute', updated_at as u1, (select updated_at from table where updated_at > u1 limit 1) as u2)
   group by updated_at::date
 )

 select max(select time_diff from nearest_time);

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Используйте lag, чтобы получить updated_at из предыдущей строки, а затем получить максимальную разницу в день.

select dt_updated_at,max(time_diff)
from (select updated_at::date as dt_updated_at
      ,updated_at - lag(updated_at) over(partition by updated_at::date order by updated_at) as time_diff
      from tbl
     ) t 
group by dt_updated_at

Еще одна опция с использованием DISTINCT ON ( работает только на Postgres .. поскольку вопрос был изначально помечен Postgres, сохраняя этот ответ)

select distinct on
 (updated_at::date) 
 updated_at::date as dt_updated_at 
,updated_at-lag(updated_at) over(partition by updated_at::date order by updated_at) as diff
from dates
order by updated_at::date,diff desc
nulls last
0 голосов
/ 04 декабря 2018

demo: db <> fiddle

SELECT 
    lead(updated) OVER (ORDER BY updated) - updated as diff 
FROM dates 
ORDER BY diff DESC NULLS LAST
LIMIT 1;

Использование оконной функции LEAD позволяет получить значение следующей строки: в этом случаевы можете получить следующую метку времени.

С этим вы можете сделать вычитание, отсортировав результаты по убыванию и получив первое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...