Обновление таблицы на основе разницы во времени между последовательными строками - PullRequest
0 голосов
/ 03 октября 2019

У меня есть таблица со следующей структурой

enter image description here

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

enter image description here

с использованием Postgres версии 11. Я хотел бы запускать свой запрос каждые несколько минут, чтобы обновить продолжительность времени

1 Ответ

1 голос
/ 03 октября 2019

Попробуйте функцию окна lead():

SELECT id, type, time_stamp,
       lead(time_stamp) OVER (PARTITION BY type ORDER BY time_stamp) - time_stamp
FROM atable
ORDER BY time_stamp;

Если вы хотите обновить таблицу, вы можете сделать это следующим образом:

UPDATE atable
SET timeduration = x.td
FROM (SELECT id,
             lead(time_stamp) 
                OVER (PARTITION BY type ORDER BY time_stamp)
                - time_stamp AS td
      FROM atable) AS x
WHERE x.id = atable.id AND x.td IS NOT NULL;
...