PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser une fonction de fenêtre pour déterminer quand effectuer différentes tâches dans Hive ou Postgres ?

La solution dans Postgres est assez simple, car elle prend en charge generate_series() . Commencez par exploser les données d'une ligne par jour pour chaque ligne de votre tableau :

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

Ensuite, agrégez pour obtenir la tâche pour chaque jour :

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;

Vous pouvez ensuite réagréger, mais c'est délicat car vous avez peut-être "divisé" les lignes d'origine (voir mon commentaire). Cela répond à votre question sur quelle tâche effectuer quel jour.

Vous pouvez faire tout cela sans jointure latérale ou generate_series() à l'aide d'un tableau de nombre/pointage.