sql >> Databasteknik >  >> RDS >> PostgreSQL

Generera flera rader från en enda rad baserat på datum

Vi kan prova att använda en kalendertabell här, som inkluderar alla möjliga startdatum för månaden som kan visas i det förväntade resultatet:

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. Hibernate:själv gå med förvirring?

  2. MySQL where klausul och ordning efter avg() som en underfråga

  3. PostgreSQL-funktioner returnerar void

  4. Vad är en bokmärkessökning i SQL Server?