PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak używać funkcji okna, aby określić, kiedy wykonać różne zadania w Hive lub Postgres?

Rozwiązanie w Postgresie jest dość proste, ponieważ obsługuje generate_series() . Najpierw rozbij dane dla jednego wiersza dziennie dla każdego wiersza w tabeli:

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

Następnie zsumuj, aby otrzymać zadanie na każdy dzień:

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;

Następnie możesz ponownie agregować, ale jest to trudne, ponieważ możesz „podzielić” oryginalne wiersze (patrz mój komentarz). To odpowiada na Twoje pytanie, które zadanie wykonać w danym dniu.

Możesz to wszystko zrobić bez łączenia bocznego lub generate_series() za pomocą tabeli liczb/podsumowań.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django Postgresql usuwa domyślne ustawienia kolumn podczas migracji

  2. pg gem Trace/BPT trap:błąd 5 w systemie MAC OS X lion

  3. Korzystanie z pg_restore w pliku zrzutu

  4. Mac psql/readline — biblioteka nie jest załadowana

  5. Jak zbiorczo wstawiać tylko nowe wiersze w PostreSQL