PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

postgresql menggabungkan beberapa periode menjadi satu

Hai, saya sarankan menggunakan proses berikut:

1- Identifikasi saat baris baru, sehingga Anda memberikan nilai 1 untuk nilai yang tidak tumpang tindih (CTE b)

2- Urutkan bersama baris yang tumpang tindih dengan yang lain. Dengan cara ini Anda dapat melihat memiliki pengenal umum yang memungkinkan Anda untuk MAX dan MIN begat dan endat (CTE c)

3- Untuk setiap urutan, berikan MIN dari begat dan MAX dari endat sehingga Anda akan memiliki nilai akhir Anda

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. Ubah kunci utama di tabel PostgreSQL

  2. Kelas tidak ditemukan memuat JDBC org.postgresql.Driver

  3. Postgresql 10 - Konfigurasi paralel

  4. Bagaimana cara mendapatkan perintah postgres 'nth_value' yang setara di pyspark Hive SQL?

  5. Kembalikan database PostgreSQL menggunakan java