Попробуйте функцию окна 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;