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

Как мога да накарам функцията на прозореца Redshift/Postgresql LAG да изключва избирателно записи?

Подходът, който ми хрумна, беше вместо това да се насоча към отделните записи, които трябва да бъдат етикетирани като TRUE . Помислете за това:

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY phone ORDER BY ts) rn
    FROM notifications n1
    WHERE EXISTS (SELECT 1 FROM notifications n2 WHERE n1.phone = n2.phone AND
                  n2.ts < n1.ts AND n2.status = 'SUB' AND n2.result = 'SUCCESS') AND
          n1.status = 'RENEWAL' AND n1.result = 'SUCCESS'
)

SELECT n1.*,
    CASE WHEN n2.rn = 1 THEN 'TRUE'
         WHEN n2.rn > 1 THEN 'FALSE' END AS is_first_renewal
FROM notifications n1
LEFT JOIN cte n2
    ON n1.phone = n2.phone AND n1.ts = n2.ts;

Тази заявка изглежда работи в демо връзката на Postgres, дадена по-долу.

Демо




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Новоприсвоената последователност не работи

  2. Общо... с обрат

  3. Как да архивирате и възстановите PostgreSQL база данни чрез DBeaver

  4. Как да създавате и изтривате бази данни и таблици в PostgreSQL

  5. Как да изключа функциите на PL/pgSQL при експортиране?