Ho una tabella come questa,funzione GAL e 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
mi piacerebbe applicare la funzione di ritardo, ma anche un gruppo da così posso trovare gli intervalli di tempo tra una particolare event_id.
mi piacerebbe qualcosa di simile:
SELECT event_id, difference
FROM (
SELECT event_id, date - lag(date) over (order by date) as
difference FROM table GROUP BY event_id
) t;
Non posso però usare GROUP BY con la funzione GAL. Vorrei un risultato simile al seguente:
63116743, {120, 60}
60894420, {60}
...
...
Quindi c'era una finestra 120s e '60 tra gli eventi del primo id, e una finestra 60 per il secondo id.
C'è un modo per farlo? Il formato di output non è troppo importante finché riesco a inserirlo in un array alla fine. Sto usando Postgres 9.1
Siamo spiacenti, ma non capisco cosa significhi l'output. 120? 60? di cosa? non sembra provenire dai dati che hai mostrato. –
La sotto-selezione nella tua domanda non sta aggiungendo nulla alla query - stai facendo effettivamente un "SELECT *" da esso, che è lo stesso della semplice esecuzione della query interna. – IMSoP
@depesz \t È un intervallo espresso in secondi: 120s tra '2013-06-25 07: 55: 57-04' e '2013-06-25 07: 57: 57-04', quindi tra 60 e '2013 -06-25 07: 58: 57-04 ', confrontando solo gli eventi con lo stesso ID. – IMSoP