LAG и GROUP BY
У меня есть таблица, подобная этой,
event_id | date
----------+------------------------
1703702 | 2013-06-25 07:50:57-04
3197588 | 2013-06-25 07:51:57-04
60894420 | 2013-06-25 07:52:57-04
60894420 | 2013-06-25 07:53:57-04
183503 | 2013-06-25 07:54:57-04
63116743 | 2013-06-25 07:55:57-04
63110451 | 2013-06-25 07:56:57-04
63116743 | 2013-06-25 07:57:57-04
63116743 | 2013-06-25 07:58:57-04
Я хотел бы применить функцию задержки, но также и группу, чтобы найти временные интервалы между любыми событиями event_id.
Мне бы хотелось что-то вроде этого:
SELECT event_id, difference
FROM (
SELECT event_id, date - lag(date) over (order by date) as
difference FROM table GROUP BY event_id
) t;
Я не могу использовать GROUP BY с функцией LAG. Я хотел бы получить результат, похожий на следующий:
63116743, {120, 60}
60894420, {60}
...
...
Таким образом, между событиями для первого id было окно 120s и 60s и окно 60s для второго id.
Есть ли способ сделать это? Формат вывода не слишком важен, пока я могу получить его в массив в конце. Я использую Postgres 9.1
Ответы
Ответ 1
WITH diffs as (
SELECT
event_id,
date - lag(date) over (partition BY event_id ORDER BY date) as difference
FROM
TABLE
)
SELECT
event_id,
array_agg( difference ) as all_diffs
FROM
diffs
GROUP BY event_id;
Должен работать.