PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

SQL прозоречна функция с клауза where?

Току-що опитах подхода на Гордън с помощта на PostgreSQL 9.5.4 и се оплака, че

което означава използване на lag() с FILTER не е позволено. Така че модифицирах заявката на Gordon с помощта на max() , различна рамка на прозорец и 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';

Проверено, че това работи с PostgreSQL 9.5.4.

Благодаря на Гордън за FILTER трик!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Параметри и нулеви стойности на Npgsql 4.0

  2. Добавете месеци към дата в PostgreSQL

  3. Предоставете всички по конкретна схема в db на групова роля в PostgreSQL

  4. Възможно ли е да се използва променлива и да не се посочи тип на връщане в postgreSQL?

  5. Как да конвертирате йерархични заявки на oracle в postgresql?