PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana saya bisa mendapatkan fungsi jendela Redshift/Postgresql LAG untuk mengecualikan catatan secara selektif?

Pendekatan yang terlintas dalam pikiran saya adalah untuk menargetkan catatan individu yang harus diberi label sebagai TRUE . Pertimbangkan ini:

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;

Kueri ini tampaknya berfungsi di tautan demo Postgres yang diberikan di bawah ini.

Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara awalan nama urutan?

  2. Laravel localhost berfungsi, tetapi heroku memberikan 500 kesalahan

  3. utilitas gpload di greenplum

  4. Mendapatkan kata terakhir dari string Postgres, secara deklaratif

  5. Bagaimana cara memanggil prosedur PostgreSQL di Jawa?