PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Função de janela SQL com uma cláusula where?


Apenas tentei a abordagem de Gordon usando o PostgreSQL 9.5.4, e ele reclamou que

o que significa usar lag() com FILTER não é permitido. Então eu modifiquei a consulta de Gordon usando max() , uma moldura de janela diferente e 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';

Verificado que isso funciona com o PostgreSQL 9.5.4.

Obrigado a Gordon pelo FILTER truque!