यह अन्य प्रश्नों के समान ही है, लेकिन सबसे अच्छी क्वेरी अभी भी मुश्किल है।
मूल क्वेरी रनिंग सम जल्दी पाने के लिए:
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);
मुश्किल हिस्सा है गुम हुए महीनों को भरना :
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;
अंतर्निहित CROSS JOIN LATERAL
पोस्टग्रेज 9.3+ की आवश्यकता है। यह तालिका में पहले महीने से शुरू होता है।
किसी दिए गए महीने से शुरू करने के लिए :
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;
अलग-अलग वर्षों से महीनों को अलग रखना। आपने इसके लिए नहीं कहा था, लेकिन सबसे अधिक संभावना है कि आप इसे चाहते हैं।
ध्यान दें कि "माह" कुछ हद तक वर्तमान सत्र की समय क्षेत्र सेटिंग पर निर्भर करता है! विवरण:
संबंधित:
- PostgreSQL में संचयी योग की गणना करना
- PostgreSQL:किसी क्वेरी के लिए 'मिनट के हिसाब से' पंक्तियों की चल रही गिनती
- विंडो फ़ंक्शन को पोस्ट करें और अपवाद के आधार पर समूह