sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur använder man en fönsterfunktion för att avgöra när man ska utföra olika uppgifter i Hive eller Postgres?

Lösningen i Postgres är ganska enkel, eftersom den stöder generate_series() . Explodera först data för en rad per dag för varje rad i din tabell:

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

Sammanställ sedan för att få uppgiften för varje dag:

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;

Du kan sedan aggregera igen, men detta är knepigt eftersom du kanske har "delat upp" de ursprungliga raderna (se min kommentar). Detta svarar på din fråga om vilken uppgift du ska utföra vilken dag.

Du kan göra allt detta utan en lateral join eller generate_series() genom att använda en siffer-/sammanräkningstabell.




  1. flera tillagda entiteter kan ha samma primärnyckel på databasfrö

  2. PostgreSQL-konverteringsarray returneras från funktion till kolumner

  3. Hur konverterar man en db i postgreSQL till utf8?

  4. Välj flera kolumner från en tabell och infoga data i en annan tabell i en annan databas i PHP-MySQL