PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Generowanie wielu wierszy z jednego wiersza na podstawie dat

Możemy spróbować użyć tutaj tabeli kalendarza, która zawiera wszystkie możliwe daty rozpoczęcia miesiąca, które mogą pojawić się w oczekiwanym wyniku:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Szczegółowe informacje na temat dostawców chmury:PostgreSQL na Microsoft Azure

  2. Wykonać wyzwalacz w widoku?

  3. Postgis - Jak pracować z typem danych „geografia” za pośrednictwem JDBC

  4. Napraw „BŁĄD:kolumna „colname” nie istnieje” w PostgreSQL podczas korzystania z UNION, EXCEPT lub INTERSECT

  5. Wykrywaj i obsługuj, gdy zapytanie do bazy danych nie powiedzie się