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

Generering af tællinger af åbne billetter over tid, givet åbnede og lukkede datoer

Du kan bruge generate_series() for at bygge listen over datoer, og derefter en left join om ulighedsbetingelser for at bringe bordet:

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

Faktisk virker dette lidt tættere på det, du ønsker:

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. SQLAlchemy DELETE Fejl forårsaget af at have en både lazy-load OG en dynamisk version af det samme forhold

  2. Begynd at se forespørgselsresultater, før forespørgslen slutter

  3. Forespørgsel for at få den seneste post og (i tilfælde af uafgjort) med den højere værdi eller procentdel efter kort og service

  4. MYSQL beregner et gennemsnit på en optælling