sql >> Database >  >> RDS >> PostgreSQL

SQL-vensterfunctie met een waar-clausule?

Ik heb net Gordons aanpak geprobeerd met PostgreSQL 9.5.4, en hij klaagde dat

wat betekent dat je lag() . gebruikt met FILTER is niet toegestaan. Dus ik heb Gordon's query aangepast met max() , een ander raamkozijn en 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';

Geverifieerd dat dit werkt met PostgreSQL 9.5.4.

Met dank aan Gordon voor het FILTER truc!



  1. Code om SQL-scripts te valideren

  2. Hoe een lijst met kolommen met unieke beperkingen in SQL Server-database te krijgen - SQL Server / TSQL-zelfstudie, deel 98

  3. blob omzetten in clob

  4. Selecteer terug dingen die niet bestaan