sql >> Database teknologi >  >> RDS >> PostgreSQL

SQL vinduesfunktion med en where-klausul?

Har lige prøvet Gordons tilgang ved hjælp af PostgreSQL 9.5.4, og den klagede over det

hvilket betyder at bruge lag() med FILTER er ikke tilladt. Så jeg ændrede Gordons forespørgsel ved hjælp af max() , en anden vinduesramme og 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';

Bekræftet, at dette virker med PostgreSQL 9.5.4.

Tak til Gordon for FILTER trick!



  1. MySQL Duplikatkolonnefejl kun når forespørgslen er pakket som underforespørgsel

  2. #1067 - Ugyldig standardværdi for 'bonusid' hvordan kan jeg rette denne fejl?

  3. Hierarkisk tagging i SQL

  4. MySQL opdaterer et felt med en stigende variabel