Har lige prøvet Gordons tilgang ved hjælp af PostgreSQL 9.5.4, og den klagede over det
hvilket betyder at bruge lag()
med FILTER
er ikke tilladt. Så jeg ændrede Gordons forespørgsel ved hjælp af max()
, en anden vinduesramme og 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';
Bekræftet, at dette virker med PostgreSQL 9.5.4.
Tak til Gordon for FILTER
trick!