PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Lọc ra các bản ghi tiếp theo trùng lặp trong một CHỌN

Chà, bạn không gần đến mức đó vì row_number() không thể theo dõi trình tự của hai nhóm cùng một lúc. PARTITION BY tm_nl_fixedid ORDER BY date RESTART ON GAP không tồn tại, không có thứ đó.

Itzik Ben-Gan có một giải pháp cho vấn đề các hòn đảo và khoảng trống mà bạn đang gặp phải (thực tế là một số giải pháp). Ý tưởng là sắp xếp thứ tự các hàng theo tiêu chí chính (ngày) và sau đó theo tiêu chí phân vùng + tiêu chí chính. Sự khác biệt giữa các thứ tự sẽ không thay đổi vì chúng thuộc cùng một tiêu chí phân vùng và chuỗi ngày.

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

Đây là ví dụ về Sql Fiddle .

Và đây là chương 5 của Sql Server MVP Deep Dives với một số giải pháp cho vấn đề đảo và khoảng trống .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhận hàng đầu tiên trong truy vấn postgres

  2. Tại sao hàm phạm vi trên của postgres cho một phạm vi ngày trả về một giới hạn độc quyền?

  3. Trình điều khiển HikariCP Postgresql Tuyên bố không chấp nhận URL JDBC

  4. Trích xuất dữ liệu từ PostgreSQL DB mà không sử dụng pg_dump

  5. cửa sổ trượt sql - tìm giá trị tối đa trong khoảng thời gian