sql >> Database >  >> RDS >> PostgreSQL

Hoe een vensterfunctie gebruiken om te bepalen wanneer verschillende taken in Hive of Postgres moeten worden uitgevoerd?

De oplossing in Postgres is vrij eenvoudig, omdat het generate_series() ondersteunt . Vergroot eerst de gegevens voor één rij per dag voor elke rij in uw tabel:

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

Verzamel vervolgens om de taak voor elke dag te krijgen:

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;

Je kunt dan opnieuw aggregeren, maar dit is lastig omdat je de originele rijen misschien hebt "gesplitst" (zie mijn opmerking). Dit beantwoordt je vraag over welke taak je op welke dag moet uitvoeren.

U kunt dit allemaal doen zonder een laterale verbinding of generate_series() door gebruik te maken van een getallen-/tellingstabel.




  1. Hoe data vergelijken in sqlalchemy?

  2. Vul een tekenreeks in met voorloopnullen zodat deze 3 tekens lang is in SQL Server 2008

  3. Met de juiste tools werkt het afstemmen snel

  4. geschiedenis rijen beheer in database