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

Jumlah kumulatif nilai menurut bulan, mengisi bulan yang hilang

Ini sangat mirip dengan pertanyaan lain, tetapi kueri terbaik masih rumit.

Kueri dasar untuk mendapatkan jumlah yang berjalan dengan cepat:

SELECT to_char(date_trunc('month', date_added), 'Mon YYYY') AS mon_text
     , sum(sum(qty)) OVER (ORDER BY date_trunc('month', date_added)) AS running_sum
FROM   tbl
GROUP  BY date_trunc('month', date_added)
ORDER  BY date_trunc('month', date_added);

Bagian yang sulit adalah mengisi bulan yang hilang :

WITH cte AS (
   SELECT date_trunc('month', date_added) AS mon, sum(qty) AS mon_sum
   FROM   tbl
   GROUP  BY 1
   )
SELECT to_char(mon, 'Mon YYYY') AS mon_text
     , sum(c.mon_sum) OVER (ORDER BY mon) AS running_sum
FROM  (SELECT min(mon) AS min_mon FROM cte) init
     , generate_series(init.min_mon, now(), interval '1 month') mon
LEFT   JOIN cte c USING (mon)
ORDER  BY mon;

implisit CROSS JOIN LATERAL membutuhkan Postgres 9.3+. Ini dimulai dengan bulan pertama dalam tabel.
Untuk memulai dengan bulan tertentu :

WITH cte AS (
   SELECT date_trunc('month', date_added) AS mon, sum(qty) AS mon_sum
   FROM   tbl
   GROUP  BY 1
   )
SELECT to_char(mon, 'Mon YYYY') AS mon_text
     , COALESCE(sum(c.mon_sum) OVER (ORDER BY mon), 0) AS running_sum
FROM   generate_series('2015-01-01'::date, now(), interval '1 month') mon
LEFT   JOIN cte c USING (mon)
ORDER  BY mon;

SQL Fiddle.

Menjaga bulan dari tahun yang berbeda terpisah. Anda tidak memintanya, tetapi kemungkinan besar Anda menginginkannya.

Perhatikan bahwa "bulan" sampai tingkat tertentu tergantung pada pengaturan zona waktu sesi saat ini! Detail:

Terkait:




  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 Mencabut Izin dari tabel pg_catalog

  2. TABEL DESCRIBE PostgreSQL

  3. PostgreSQL JDBC getGeneratedKeys mengembalikan semua kolom

  4. Bagaimana saya bisa memverifikasi di Postgresql bahwa JSON valid?

  5. Filter baris berdasarkan nilai di dalam beberapa kolom JSONB