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

Generowanie zliczeń otwartych biletów w czasie, z uwzględnieniem otwartych i zamkniętych dat

Możesz użyć generate_series() aby zbudować listę dat, a następnie left join w sprawie nierówności, aby przynieść stół:

select s.dt, count(t.opened_on) num_open
from generate_series(date '2019-09-01', date '2020-09-01', '1 day') s(dt)
left join mytable t
    on s.dt >= t.opened_on and s.dt < coalesce(t.closed_on, 'infinity')
group by s.dt

Właściwie wydaje się to nieco bliższe temu, czego chcesz:

select s.dt, count(t.opened_on) num_open
from generate_series(date '2019-09-01', date '2020-09-01', '1 day') s(dt)
left join mytable t
    on s.dt >= t.opened_on::date and s.dt < coalesce(t.closed_on::date, 'infinity')
group by s.dt



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skopiuj bazę danych PostgreSQL do innej bazy danych

  2. Tworzenie testu rozszerzenia w postgresql

  3. Jak uzyskać obiekt json jako kolumnę w postgresql?

  4. Zwracanie wielu wartości w funkcji

  5. PostgreSQL:Jak zdobyć wszystkie punkty w określonym promieniu