PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verwende ich eine Fensterfunktion, um zu bestimmen, wann verschiedene Aufgaben in Hive oder Postgres ausgeführt werden sollen?

Die Lösung in Postgres ist ziemlich einfach, da es generate_series() unterstützt . Lösen Sie zuerst die Daten für eine Zeile pro Tag für jede Zeile in Ihrer Tabelle auf:

select d.*, gs.dy
from data d, lateral
     generate_series(start_day, end_day) gs(dy);

Aggregieren Sie dann, um die Aufgabe für jeden Tag zu erhalten:

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;

Sie können dann erneut aggregieren, aber das ist schwierig, weil Sie möglicherweise die ursprünglichen Zeilen "geteilt" haben (siehe meinen Kommentar). Dies beantwortet Ihre Frage, welche Aufgabe an welchem ​​Tag auszuführen ist.

Sie können all dies ohne seitliche Verknüpfung oder generate_series() tun durch Verwendung einer Nummern-/Tally-Tabelle.