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

Làm thế nào để nhóm các dấu thời gian thành các đảo (dựa trên khoảng cách tùy ý)?

Đ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?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khai báo SQLAlchemy:xác định trình kích hoạt và chỉ mục (Postgres 9)

  2. Lời khuyên khóa hoặc NOWAIT để tránh phải chờ các hàng bị khóa?

  3. Tính toán tỷ lệ phần trăm với truy vấn GROUP BY

  4. Tìm kiếm trên nhiều bảng và cũng hiển thị tên bảng trong các hàng kết quả

  5. Các trường cập nhật SQL của một bảng từ các trường của một bảng khác