PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come utilizzare una funzione della finestra per determinare quando eseguire diverse attività in Hive o Postgres?

La soluzione in Postgres è abbastanza semplice, perché supporta generate_series() . Innanzitutto, esplodi i dati per una riga al giorno per ogni riga nella tabella:

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

Quindi, aggrega per ottenere l'attività per ogni giorno:

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;

Puoi quindi riaggregare, ma questo è complicato perché potresti aver "diviso" le righe originali (vedi il mio commento). Questo risponde alla tua domanda su quale attività eseguire in quale giorno.

Puoi fare tutto questo senza un join laterale o generate_series() utilizzando un numero/tabella di conteggio.