sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL-fönsterfunktion med en where-klausul?

Testade precis Gordons tillvägagångssätt med PostgreSQL 9.5.4, och det klagade på det

vilket betyder att använda lag() med FILTER är ej tillåtet. Så jag modifierade Gordons fråga med max() , en annan fönsterram och 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';

Verifierat att detta fungerar med PostgreSQL 9.5.4.

Tack till Gordon för FILTER knep!



  1. Hur viktiga är uppslagstabeller?

  2. Att hitta en "körning" av rader från en ordnad resultatuppsättning

  3. MySQL Basic Database Administration Commands – Del I

  4. hur man använder multiple join sql-fråga i java spring boot