Apenas tentei a abordagem de Gordon usando o PostgreSQL 9.5.4, e ele reclamou que
o que significa usar
lag()
com FILTER
não é permitido. Então eu modifiquei a consulta de Gordon usando max()
, uma moldura de janela diferente e CTE:WITH subq AS (
SELECT
"user", event, time as event_b_time,
max(time) FILTER (WHERE event = 'A') OVER (
PARTITION BY "user"
ORDER BY time
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
) AS last_event_a_time
FROM events
ORDER BY time
)
SELECT
"user", event_b_time, last_event_a_time
FROM subq
WHERE event = 'B';
Verificado que isso funciona com o PostgreSQL 9.5.4.
Obrigado a Gordon pelo
FILTER
truque!