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

लेन-देन तालिका से आवधिक स्नैपशॉट उत्पन्न करने के लिए SQL

ठीक है, इसे समझाना मुश्किल होगा।

प्रत्येक स्थिति के लिए प्रत्येक तिथि पर, आपको दो मानों की गणना करनी चाहिए:

  • उस स्थिति से शुरू होने वाले ग्राहकों की संख्या।
  • उस स्थिति को छोड़ने वाले ग्राहकों की संख्या।

पहला मूल्य आसान है। यह केवल तिथि और स्थिति के अनुसार लेन-देन का एकत्रीकरण है।

दूसरा मान लगभग उतना ही आसान है। आपको पिछला . मिलता है स्थिति कोड और उस तिथि को स्थिति कोड "छोड़ने" की संख्या की गणना करें।

फिर, कुंजी पहले मान का संचयी योग घटा दूसरे मान का संचयी योग है।

मैं स्वतंत्र रूप से स्वीकार करता हूं कि निम्नलिखित कोड का परीक्षण नहीं किया गया है (यदि आपके पास SQL ​​​​Fiddle था, तो मुझे इसका परीक्षण करने में खुशी होगी)। लेकिन परिणामी क्वेरी इस तरह दिखती है:

select status_dte, status_cd,
       (sum(inc_cnt) over (partition by status_cd order by status_dt) -
        sum(dec_cnt) over (partition by status_cd order by status_dt)
       ) as dateamount
from ((select t.status_dt, t.status_cd, count(*) as inc_cnt, 0 as dec_cnt
       from transactions t
       group by t.status_dt, t.status_cd 
      ) union all
      (select t.status_dt, prev_status_cd, 0, count(*)
       from (select t.*
                    lag(t.status_cd) over (partition by t.account_id order by status_dt) as prev_status_cd
             from transactions t
            ) t
       where prev_status_cd is null
       group by t.status_dt, prev_status_cd
      ) 
     ) t;

यदि आपके पास ऐसी तिथियां हैं जहां एक या अधिक स्थितियों के लिए कोई परिवर्तन नहीं है और आप उन्हें आउटपुट में शामिल करना चाहते हैं, तो उपरोक्त क्वेरी को cross join . का उपयोग करने की आवश्यकता होगी पहले परिणाम सेट में पंक्तियाँ बनाने के लिए। यह स्पष्ट नहीं है कि क्या यह एक आवश्यकता है, इसलिए मैं उस जटिलता को छोड़ रहा हूँ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल plsql ट्रिगर के साथ जन्मदिन से आयु की गणना करना और तालिका में आयु सम्मिलित करना

  2. ORA-04091:तालिका xx_xx उत्परिवर्तित हो रही है, ट्रिगर/फ़ंक्शन इसे नहीं देख सकता है

  3. नेस्टेड टेबल को क्वेरी करना

  4. पर्ल डीबीडी ::ओरेकल मॉड्यूल स्थापना

  5. नोड js . के लिए डीबी-ओरेकल स्थापित करें