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

tính toán tổng các giá trị được liên kết với các phạm vi ngày trùng lặp

Đây là nỗ lực của tôi để giải quyết vấn đề này:

select y,
     sum( hrs_per_week )
from tmp_ranges t
join(
  select daterange( x,
         lead(x) over (order by x) ) As y
  from (
    select lower( rng ) As x
    from tmp_ranges
    union 
    select upper( rng )
    from tmp_ranges
    order by x
  ) y
) y
on t.rng && y.y
group by y
order by y

Demo: http://sqlfiddle.com/#!15/ef6cb/13

Truy vấn con trong cùng thu thập tất cả các ngày ranh giới thành một tập hợp bằng cách sử dụng union , sau đó sắp xếp chúng.
Sau đó, truy vấn con bên ngoài xây dựng các phạm vi mới từ các ngày liền kề bằng cách sử dụng lead hàm.
Cuối cùng, các phạm vi mới này được kết hợp với bảng nguồn trong truy vấn chính, được tổng hợp và sum được tính toán.

CHỈNH SỬA
order by mệnh đề trong truy vấn trong cùng là thừa và có thể bị bỏ qua vì lead(x) over sử dụng các bản ghi đơn hàng theo ngày và tập kết quả từ truy vấn con trong cùng không cần phải được sắp xế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. Kết nối npgsql với chứng chỉ ssl trong api web lõi .net

  2. Đi thẳng vào đám mây tại CHAR (10)

  3. Thiết lập dữ liệu liên tục cho Carto / Postgresql trên ACI

  4. lấy ngày từ dấu thời gian trong PostgreSQL

  5. Rails không chuyển đổi múi giờ (PostgreSQL)