PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज़ का उपयोग करके मासिक आवर्ती राजस्व (एमआरआर) परिणाम की गणना करें

यह काफी आसान है generate_series INTERVAL . के साथ प्रयोग किया जा सकता है s और हम एक LATERAL JOIN . का उपयोग कर सकते हैं प्रत्येक जेसन पंक्ति के लिए डेटा उत्पन्न करने के लिए।

WITH j AS(
SELECT '{
  "id": "1",
  "amount": 3900,
  "interval": "1 WEEK",
  "created": 1424011935
}'::json AS data
UNION ALL
SELECT '{
  "id": "2",
  "amount": 100,
  "interval": "23.5 DAY",
  "created": 552614400
}'::json
),
dates AS(
SELECT
'2008-03-01 00:00'::timestamp AS start
,'2015-03-08 07:00'::timestamp AS stop
)
SELECT j.data->>'id'
    ,sum((j.data->>'amount')::int)
    ,count(*) as intervals
FROM j
CROSS JOIN dates
CROSS JOIN LATERAL
    (SELECT i
    FROM generate_series(to_timestamp((j.data->>'created')::int), dates.stop + (j.data->>'interval')::interval,(j.data->>'interval')::interval) as i
    WHERE i BETWEEN dates.start AND dates.stop
    ) AS q
GROUP BY j.data->>'id'

उपरोक्त हमें परिणाम देता है:

 id |  sum  | intervals
----+-------+-----------
 1  | 11700 |         3
 2  | 11000 |       110

SQLFiddle




  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 पर टेबल इंडेक्सिंग

  2. PostgreSQL क्रिएट एक्सटेंशन का उपयोग करके नए मॉड्यूल बनाना

  3. एक एसक्यूएल क्वेरी में एकाधिक समय श्रृंखला कैसे उत्पन्न करें?

  4. PHP और पोस्टग्रेस:​​त्रुटियों को पकड़ना?

  5. Postgresql - संभावित उद्धरणों के साथ रेगेक्स स्प्लिट सीएसवी लाइन