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()
.
- Lập nhóm các ngày liên tiếp (cùng ngày trong
grp
) trong truy vấn consub
. - Đá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ởigrp
.
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.
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.