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

Hvordan bruger man en vinduesfunktion til at bestemme, hvornår man skal udføre forskellige opgaver i Hive eller Postgres?

Løsningen i Postgres er ret nem, fordi den understøtter generate_series() . Først skal du eksplodere dataene for en række om dagen for hver række i din tabel:

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

Saml derefter for at få opgaven for hver 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 derefter aggregere igen, men det er vanskeligt, fordi du måske har "delt" de originale rækker (se min kommentar). Dette besvarer dit spørgsmål om, hvilken opgave du skal udføre på hvilken dag.

Du kan gøre alt dette uden en lateral joinforbindelse eller generate_series() ved at bruge en tal-/optællingstabel.




  1. Hvad er Check Constraint i SQL Server - SQL Server / TSQL Tutorial Del 82

  2. VÆLG FOR XML AUTO og returner datatyper

  3. Sådan installeres SQL Server på en Mac

  4. Sådan installeres MySQL 8.0 på CentOS 8 / RHEL 8