Ich habe gerade Gordons Ansatz mit PostgreSQL 9.5.4 ausprobiert und er hat sich darüber beschwert
was bedeutet, dass lag()
verwendet wird mit FILTER
ist nicht erlaubt. Also habe ich Gordons Abfrage mit max()
modifiziert , ein anderer Fensterrahmen und 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';
Bestätigt, dass dies mit PostgreSQL 9.5.4 funktioniert.
Danke an Gordon für den FILTER
Trick!