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

postgresql kết hợp nhiều khoảng thời gian thành một

Này, tôi khuyên bạn nên sử dụng quy trình sau:

1- Xác định thời điểm một hàng là hàng mới, vì vậy bạn đặt giá trị 1 cho các giá trị không trùng lặp (CTE b)

2- Trình tự các hàng trùng lặp với các hàng khác với nhau. Bằng cách này, bạn có thể thấy một số nhận dạng chung sẽ cho phép bạn MAX và MIN đầu tiên và kết thúc (CTE c)

3- Đối với mỗi trình tự, cung cấp MIN của nội dung và MAX của nội dung để bạn có các giá trị cuối cùng của mình

WITH a AS (
select '2017-09-16 07:12:57' as begat,'2017-09-16 11:30:22' as endat
union 
select '2017-09-18 17:05:21' ,'2017-09-19 13:18:01'
union 
select '2017-09-19 15:34:40' ,'2017-09-22 13:29:37'
union 
select '2017-09-22 12:24:16' ,'2017-09-22 13:18:29' 
union 
select '2017-09-28 09:48:54' ,'2017-09-28 13:39:13'
union 
select '2017-09-20 13:52:43' ,'2017-09-20 14:14:43' 
  )
, b AS (
SELECT
    begat
  , endat
  , (begat > MAX(endat) OVER w IS TRUE)::INT is_new
FROM a
WINDOW w AS (ORDER BY begat ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
) 
, c AS (
SELECT
    begat
  , endat
  , SUM((is_new)) OVER (ORDER BY begat) seq
FROM b
)
SELECT
    MIN(begat) beg_at
  , MAX(endat) end_at
FROM c
GROUP BY seq


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm theo khoảng dữ liệu

  2. psql vai trò gây tử vong không tồn tại

  3. Gọi một hàm có kiểu kết hợp làm đối số từ truy vấn gốc trong jpa

  4. Điều cần kiểm tra xem Khả năng sử dụng bộ nhớ PostgreSQL có cao không

  5. Làm cách nào để liên kết kết quả PGSeaerch với Trang chỉ mục trong Tài nguyên lồng nhau?