De oplossing in Postgres is vrij eenvoudig, omdat het generate_series()
ondersteunt . Vergroot eerst de gegevens voor één rij per dag voor elke rij in uw tabel:
select d.*, gs.dy
from data d, lateral
generate_series(start_day, end_day) gs(dy);
Verzamel vervolgens om de taak voor elke dag te krijgen:
select d.person, d.dy, max(d.task_key) as task_key
from (select d.*, gs.dy
from data d, lateral
generate_series(start_day, end_day) gs(dy)
) d
group by d.person, d.dy;
Je kunt dan opnieuw aggregeren, maar dit is lastig omdat je de originele rijen misschien hebt "gesplitst" (zie mijn opmerking). Dit beantwoordt je vraag over welke taak je op welke dag moet uitvoeren.
U kunt dit allemaal doen zonder een laterale verbinding of generate_series()
door gebruik te maken van een getallen-/tellingstabel.