PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fonction de fenêtre SQL avec une clause where ?

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 !