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

menghitung jumlah nilai yang terkait dengan rentang tanggal yang tumpang tindih

Inilah upaya saya untuk memecahkan masalah ini:

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

Subquery terdalam mengumpulkan semua tanggal batas menjadi satu set menggunakan union , lalu mengurutkannya.
Kemudian subkueri luar membuat rentang baru dari tanggal yang berdekatan menggunakan lead fungsi.
Pada akhirnya, rentang baru ini digabungkan ke tabel sumber dalam kueri utama, agregat, dan sum dihitung.

EDIT
order by klausa dalam kueri terdalam adalah berlebihan dan dapat dilewati, karena lead(x) over caluse memesan catatan berdasarkan tanggal, dan kumpulan hasil dari subkueri terdalam tidak harus diurutkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hibernate insert batch dengan postgresql yang dipartisi

  2. PostgreSQL:peran tidak diizinkan untuk masuk

  3. Spring JDBC - Id yang terakhir dimasukkan

  4. PostgreSQL -harus muncul di klausa GROUP BY atau digunakan dalam fungsi agregat

  5. Saya tidak dapat membuat File Pemetaan Hibernasi dan POJO dari Database PostgreSQL?