วิธีรับวันที่ต่อเนื่องใน Presto โดยมีวันที่เริ่มต้นในคอลัมน์หนึ่งและวันที่สิ้นสุดในอีกคอลัมน์หนึ่ง

ด้านล่างนี้คือลักษณะของตาราง Raw ใน presto

ตารางอินพุต

ฉันต้องการสร้างตารางใหม่โดยที่สำหรับแต่ละ Item ID วันที่ต่อเนื่องควรมีวันที่เริ่มต้นและวันที่สิ้นสุดไม่ว่าจะมีความต่อเนื่องใน presto

ด้านล่างนี้คือลักษณะของตารางตัวอย่าง

ตารางผลลัพธ์


person Rpunk21    schedule 30.06.2020    source แหล่งที่มา
comment
คุณใช้ Hive หรือ Presto หรือไม่? พวกเขาไม่เหมือนกัน   -  person Gordon Linoff    schedule 30.06.2020


คำตอบ (1)


นี่เป็นปัญหาช่องว่างและหมู่เกาะ วิธีที่ง่ายที่สุดคือการลบลำดับเพื่อให้ได้วันที่คงที่ จากนั้นจึงรวม:

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');

ฟังก์ชั่นหน้าต่างแตกต่างกันไปตามฐานข้อมูล ตรรกะจะเหมือนกัน แต่ไวยากรณ์สำหรับการลบ seqnum วันจาก datefield อาจแตกต่างกัน

person Gordon Linoff    schedule 30.06.2020
comment
คุณช่วยฉันด้วยความเข้าใจว่าทำไมคุณถึงใช้ (datefield - seqnum * ช่วง '1 วัน') ในกลุ่มและช่วยยกตัวอย่างวิธีคำนวณ - person Rpunk21; 01.07.2020
comment
@rpunk21 . . . เรียกใช้โค้ด select t.*, (datefield - seqnum * interval '1 day') from t order by id, datefield แล้วคุณจะเห็นได้ด้วยตัวเอง - person Gordon Linoff; 01.07.2020