PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menghasilkan beberapa baris dari satu baris berdasarkan tanggal

Kita dapat mencoba menggunakan tabel kalender di sini, yang mencakup semua kemungkinan tanggal awal bulan yang mungkin muncul di output yang diharapkan:

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. Pesan dengan hubungan has_many

  2. Ketika saya menjalankan test case saya mendapatkan kesalahan ini:psycopg2.OperationalError:cursor _django_curs_140351416325888_23 not existing

  3. Penyaringan Django JSONField

  4. postgresql COUNT(DISTINCT ...) sangat lambat

  5. Kekurangan tabel dengan terlalu banyak kolom