PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como usar uma função de janela para determinar quando executar tarefas diferentes no Hive ou no Postgres?


A solução no Postgres é bastante fácil, porque suporta generate_series() . Primeiro, exploda os dados de uma linha por dia para cada linha em sua tabela:
select d.*, gs.dy
from data d, lateral
     generate_series(start_day, end_day) gs(dy);

Em seguida, agregue para obter a tarefa para cada dia:
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;

Você pode então reagregar, mas isso é complicado porque você pode ter "dividido" as linhas originais (veja meu comentário). Isso responde à sua pergunta sobre qual tarefa executar em qual dia.

Você pode fazer tudo isso sem uma junção lateral ou generate_series() usando uma tabela numérica/tabela.