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

Generering af flere rækker fra en enkelt række baseret på datoer

Vi kan prøve at bruge en kalendertabel her, som inkluderer alle mulige start på månedsdatoer, som kan forekomme i det forventede output:

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. Bedste måde at kopiere en database (SQL Server 2008)

  2. Hukommelseslækage i PHP ved hentning af stort datasæt fra MySQL

  3. Sådan vælger du sidste N poster fra en tabel i mysql

  4. Konverteringsmetode. Den angivne metode på typen kan ikke oversættes til et LINQ til Entities butiksudtryk