PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQL-Fensterfunktion mit einer Where-Klausel?

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!