Cara mendapatkan tanggal Berkelanjutan di Presto dengan tanggal mulai di satu kolom dan tanggal akhir di kolom lain

Di bawah ini adalah tampilan tabel Raw di presto

Tabel Masukan

Saya ingin membuat tabel baru di mana untuk setiap ID Item tanggal berkelanjutan harus memiliki tanggal mulai dan tanggal akhir di mana pun tanggal tersebut berkelanjutan di presto

Di bawah ini adalah tampilan tabel contohnya

Tabel Keluaran


person Rpunk21    schedule 30.06.2020    source sumber
comment
Apakah Anda menggunakan Hive atau Presto? Mereka tidak sama.   -  person Gordon Linoff    schedule 30.06.2020


Jawaban (1)


Ini adalah masalah kesenjangan dan pulau. Metode paling sederhana adalah dengan mengurangi suatu barisan untuk mendapatkan tanggal yang konstan -- lalu mengagregasinya:

select id, min(datefield), max(datefield)
from (select t.*, row_number() over (partition by id order by datefield) as seqnum
      from t
     ) t
group by id, (datefield - seqnum * interval '1 day');

Fungsi jendela berbeda berdasarkan database. Logikanya sama, tetapi sintaksis untuk mengurangkan seqnum hari dari datefield mungkin berbeda.

person Gordon Linoff    schedule 30.06.2020
comment
Bisakah Anda membantu saya memahami mengapa Anda menggunakan (datefield - seqnum * interval '1 hari') di group by dan membantu dengan contoh cara menghitungnya - person Rpunk21; 01.07.2020
comment
@rpunk21 . . . Jalankan kode select t.*, (datefield - seqnum * interval '1 day') from t order by id, datefield dan Anda akan dapat melihatnya sendiri. - person Gordon Linoff; 01.07.2020