Điều này sẽ làm được:
SELECT done, count(*) FILTER (WHERE step) OVER (ORDER BY done) AS grp
FROM (
SELECT done
, (lag(done) OVER (ORDER BY done) <= done - interval '2 min') AS step
FROM tbl
) sub
ORDER BY done;
Truy vấn con sub
bản ghi step
dưới dạng true
nếu hàng trước đó cách ít nhất 2 phút - sắp xếp theo cột dấu thời gian done
trong trường hợp này.
Truy vấn bên ngoài thêm số bước luân phiên, thực sự là số nhóm (grp
) - kết hợp FILTER
tổng hợp mệnh đề với một chức năng cửa sổ khác.
db <> fiddle here
Có liên quan:
- Truy vấn để tìm tất cả các dấu thời gian cách nhau một khoảng nhất định
- Làm cách nào để gắn nhãn các nhóm trong postgresql khi quyền thuộc về nhóm phụ thuộc vào dòng trước?
- Chọn chuỗi liên tục dài nhất
- Nhóm hoặc Cửa sổ
Giới thiệu về FILTER
tổng hợp mệnh đề:
- Làm cách nào để đơn giản hóa truy vấn thống kê trò chơi này?
- Hàm dẫn / trễ có điều kiện PostgreSQL?