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

Tìm nhóm các số liên tiếp lớn nhất trong một phân vùng

Bạn có thể làm điều này với các chức năng cửa sổ.

select player_id, runs, count(*) as numruns
from (select p.*,
             (row_number() over (partition by player_id order by match_date) -
              row_number() over (partition by player_id, runs order by match_date)
             ) as grp
      from players p
     ) pg
group by grp, player_id, runs
order by numruns desc
limit 1;

Quan sát chính là "chạy theo trình tự" có thuộc tính này:nếu bạn liệt kê các hàng (cho mỗi người chơi) theo ngày và bạn liệt kê các hàng cho mỗi người chơi và theo lượt chạy theo ngày, thì sự khác biệt là không đổi khi lượt chạy đều giống nhau và theo thứ tự. Điều đó tạo thành một nhóm mà bạn có thể sử dụng để tổng hợp nhằm xác định người chơi bạn muốn.

Tại đây là SQL Fiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi UTF-8 tương tự cho trường tự động hoàn thành

  2. Asp.net MVC4, PostgreSQL và SimpleMembership

  3. Làm thế nào bạn có thể mở rộng một hàng PostgreSQL cô đọng thành các cột riêng biệt?

  4. Truy vấn bản ghi mới nhất hiệu quả với Postgresql

  5. INSERT [...] ON CONFLICT có thể được sử dụng cho các vi phạm khóa ngoại không?