sql >> Databáze >  >> RDS >> PostgreSQL

Funkce okna SQL s klauzulí where?

Právě jsem vyzkoušel Gordonův přístup pomocí PostgreSQL 9.5.4 a stěžoval si, že

což znamená použití lag() pomocí FILTER není povoleno. Takže jsem upravil Gordonův dotaz pomocí max() , jiný okenní rám a 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';

Ověřeno, že to funguje s PostgreSQL 9.5.4.

Díky Gordonovi za FILTER trik!



  1. Jak najít všechny vztahy mezi všemi tabulkami mysql?

  2. Jak CONCAT() funguje v MariaDB

  3. Mysql upraví atribut UNSIGNED na konkrétní sloupec

  4. Upozornění:PDO::__construct():[2002] Žádný takový soubor nebo adresář (pokouším se připojit přes unix:///tmp/mysql.sock) v