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

Tìm các hàng có phạm vi ngày hoãn lại và tích lũy thời lượng của chúng

Đây là một vấn đề khoảng trống và đảo. Trong trường hợp này, bạn có thể sử dụng lag() để xem nơi bắt đầu của một hòn đảo và sau đó là tổng tích lũy.

Thao tác cuối cùng là một số tổng hợp (sử dụng các hàm cửa sổ):

SELECT p.*, 
      (Max(ends_on) OVER (PARTITION BY location_id, grp) - Min(starts_on) OVER (PARTITION BY location_id, grp) ) + 1 AS duration,
      Array_agg(p.id) OVER (PARTITION BY location_id) 
FROM (SELECT p.*, 
             Count(*) FILTER (WHERE prev_eo < starts_on - INTERVAL '1 day') OVER (PARTITION BY location_id ORDER BY starts_on) AS grp
      FROM (SELECT id, starts_on, ends_on, location_id, holiday_or_vacation_type_id, 
                   lag(ends_on) OVER (PARTITION BY location_id ORDER BY (starts_on)) AS prev_eo
            FROM periods 
           ) p
     ) p;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách truy vấn giá trị bằng ký tự đại diện trong PostgreSQL hstore

  2. Cách buộc đánh giá truy vấn con trước khi tham gia / đẩy xuống máy chủ nước ngoài

  3. Lỗi trong diễn biến trên Heroku

  4. PG ::UndefinedTable:ERROR:quan hệ không tồn tại với quy ước và đặt tên Rails chính xác

  5. Chỉ mục trên Dấu thời gian:Các hàm trong biểu thức chỉ mục phải được đánh dấu là CÓ THỂ NGAY LẬP TỨC