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

Xếp hạng dựa trên chuỗi ngày

SELECT heading, thedate
      ,row_number() OVER (PARTITION BY grp ORDER BY thedate) AS rn
FROM  (
   SELECT *, thedate - (row_number() OVER (ORDER BY thedate))::int AS grp
   FROM   demo
   ) sub;

Trong khi nói về "xếp hạng", bạn dường như muốn kết quả của hàm cửa sổ row_number() .

  1. Lập nhóm các ngày liên tiếp (cùng ngày trong grp ) trong truy vấn con sub .
  2. Đánh số các hàng bằng một row_number() khác gọi, lần này được phân vùng bởi grp .

Một truy vấn con là mức tối thiểu ở đây, vì các hàm cửa sổ không thể được lồng vào nhau.

SQL Fiddle.

Lưu ý rằng tôi đã sử dụng phiên bản thứ hai của dữ liệu mẫu mâu thuẫn của bạn. Và kết quả là @mu được đề xuất trong bình luận của mình.
Cũng giả sử rằng không có ngày nào trùng lặp. Trước tiên, bạn phải tổng hợp trong trường hợp này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc PostgreSQL, được kiểm tra khi cam kết và không sớm hơn

  2. vấn đề toàn vẹn quan hệ 'một-nhiều' cho các phạm vi thời gian

  3. Cách khử trùng SQL thô trong Rails 4

  4. Không thể kết nối với máy chủ PostgreSQL

  5. Lỗi:cú pháp nhập không hợp lệ cho số nguyên: