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

Memfilter duplikat catatan berikutnya dalam SELECT

Yah, Anda tidak sedekat itu karena row_number() tidak dapat melacak urutan oleh dua kelompok pada waktu yang sama. PARTITION BY tm_nl_fixedid ORDER BY date RESTART ON GAP tidak ada, tidak ada yang seperti itu.

Itzik Ben-Gan memiliki solusi untuk masalah pulau dan kesenjangan yang Anda hadapi (sebenarnya beberapa solusi). Idenya adalah untuk mengurutkan baris berdasarkan kriteria utama (tanggal) dan kemudian dengan membagi kriteria + kriteria utama. Perbedaan antara ordinal akan tetap sama karena mereka termasuk dalam kriteria partisi dan deret tanggal yang sama.

with cte as
(
  select *,
      -- While order by date and order by something-else, date
      -- run along, they belong to the same sequence
         row_number() over (order by tm_date)
       - row_number() over (order by tm_nl_fixedid, tm_date) grp
    from trackingMessages
)
select *,
    -- Now we can get ordinal number grouped by each sequence
       row_number() over (partition by tm_nl_fixedid, grp
                          order by tm_date) rn
  from cte
 order by tm_date

Ini Sql Fiddle beserta contohnya .

Dan ini adalah bab 5 dari Sql Server MVP Deep Dives dengan beberapa solusi untuk masalah pulau dan celah .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cloud SQL Postgres Tidak ditemukan driver yang cocok untuk jdbc:postgres://google/

  2. Temukan catatan di mana bergabung tidak ada

  3. Bagaimana menghubungkan ke postgresql dari ios9

  4. Mengelola Pembekuan di PostgreSQL

  5. Kesalahan hibernasi:transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi