sql >> Database >  >> RDS >> PostgreSQL

Meerdere rijen genereren uit een enkele rij op basis van datums

We kunnen proberen hier een kalendertabel te gebruiken, die alle mogelijke begindatums van de maand bevat die in de verwachte uitvoer kunnen voorkomen:

with calendar as (
    select '2017-09-01'::date as dt union all
    select '2017-10-01'::date union all
    select '2017-11-01'::date union all
    select '2017-12-01'::date union all
    select '2018-01-01'::date union all
    select '2018-02-01'::date union all
    select '2018-03-01'::date union all
    select '2018-04-01'::date union all
    select '2018-05-01'::date union all
    select '2018-06-01'::date union all
    select '2018-07-01'::date union all
    select '2018-08-01'::date
)

select
    t.id as subscription_id,
    c.dt,
    t.amount_monthly
from calendar c
inner join your_table t
    on c.dt >= t.start_date and
       c.dt < t.start_date + (t.month_count::text || ' month')::interval
order by
    t.id,
    c.dt;

Demo



  1. Resque Mysql2::Error:Gebruiker heeft de bron 'max_user_connections' overschreden (huidige waarde:10)

  2. Hoe SQL opvragen met actieve record voor datums tussen gespecificeerde tijden

  3. Van rol wisselen na verbinding met database

  4. externe verbinding met mysql