sql >> Databáze >  >> RDS >> PostgreSQL

Generování více řádků z jednoho řádku na základě dat

Můžeme zde zkusit použít kalendářovou tabulku, která obsahuje všechna možná data začátku měsíce, která se mohou objevit v očekávaném výstupu:

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;

Ukázka



  1. Vytvoření odkazu z položky časové osy Google Chart

  2. Převod času AM/PM na 24hodinový formát pomocí PHP nebo MySQL?

  3. Implementace hierarchické datové struktury v databázi

  4. 5 způsobů, jak implementovat vyhledávání bez rozlišení velkých a malých písmen v SQLite s plnou podporou Unicode