PostgreSQL 9.5.4を使用してGordonのアプローチを試したところ、不満がありました
これは、lag()
を使用することを意味します FILTER
を使用 許可されていません。そこで、max()
を使用してGordonのクエリを変更しました 、別のウィンドウフレーム、および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';
これがPostgreSQL9.5.4で機能することを確認しました。
FILTER
を提供してくれたGordonに感謝します トリック!