Je viens d'essayer l'approche de Gordon en utilisant PostgreSQL 9.5.4, et il s'est plaint que
ce qui signifie utiliser lag()
avec FILTER
n'est pas autorisé. J'ai donc modifié la requête de Gordon en utilisant max()
, un cadre de fenêtre différent et 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';
Vérifié que cela fonctionne avec PostgreSQL 9.5.4.
Merci à Gordon pour le FILTER
astuce !