PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Генериране на множество редове от един ред въз основа на дати

Можем да опитаме да използваме календарна таблица тук, която включва всички възможни начални дати на месеца, които може да се появят в очаквания резултат:

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;

Демо



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Една система за сигурност за приложения, пул на връзки и PostgreSQL - Случаят за LDAP

  2. Не може да се създаде драйвер от NHibernate.Driver.NpgsqlDriver

  3. Инсталиране на PDO-драйвери за PostgreSQL на Mac (с помощта на Zend за eclipse)

  4. Приспособлението на Django се зарежда много бавно

  5. Грешка:Не може да се създаде TypedQuery за заявка с повече от едно връщане