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

संचयी राशि रीसेट करें?

आपको लगातार दिनों के समूहों की पहचान करने की आवश्यकता है जहां oos =1 या 0. यह LAG फ़ंक्शन का उपयोग करके यह पता लगाने के लिए किया जा सकता है कि oos कॉलम कब बदलता है और फिर उस पर योग करता है।

with x (s_date,qty,oos,chg) as (
  select s_date,qty,oos,
         case when oos = lag(oos,1) over (order by s_date)
                then 0
                else 1
         end
  from stk
  )
select s_date,qty,oos,
       sum(chg) over (order by s_date) grp
from x;

आउटपुट :

|                         S_DATE | QTY | OOS | GRP |
|--------------------------------|-----|-----|-----|
| January, 01 2013 00:00:00+0000 |   0 |   1 |   1 |
| January, 02 2013 00:00:00+0000 |   0 |   1 |   1 |
| January, 03 2013 00:00:00+0000 |   0 |   1 |   1 |
| January, 04 2013 00:00:00+0000 |   5 |   0 |   2 |
| January, 05 2013 00:00:00+0000 |   0 |   1 |   3 |
| January, 06 2013 00:00:00+0000 |   0 |   1 |   3 |

फिर, आप इस oos को जोड़ सकते हैं, लगातार oos दिन पाने के लिए grp कॉलम द्वारा विभाजित।

with x (s_date,qty,oos,chg) as (
  select s_date,qty,oos,
         case when oos = lag(oos,1) over (order by s_date)
                then 0
                else 1
         end
  from stk
  ),
y (s_date,qty,oos,grp) as (
  select s_date,qty,oos,
         sum(chg) over (order by s_date)
  from x
  )
select s_date,qty,oos,
       sum(oos) over (partition by grp order by s_date) cum_days_oos
from y;

आउटपुट:

|                         S_DATE | QTY | OOS | CUM_DAYS_OOS |
|--------------------------------|-----|-----|--------------|
| January, 01 2013 00:00:00+0000 |   0 |   1 |            1 |
| January, 02 2013 00:00:00+0000 |   0 |   1 |            2 |
| January, 03 2013 00:00:00+0000 |   0 |   1 |            3 |
| January, 04 2013 00:00:00+0000 |   5 |   0 |            0 |
| January, 05 2013 00:00:00+0000 |   0 |   1 |            1 |
| January, 06 2013 00:00:00+0000 |   0 |   1 |            2 |

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. nhibernate, Oracle में कॉल फ़ंक्शन जो sys refcursor लौटाता है

  2. Oracle 12c में JSON के रूप में एक sql क्वेरी के परिणाम लौटाएं

  3. ओरेकल प्रतिबद्ध और चयन के बीच अंतराल

  4. ORA-01438:3 . डालने पर इस कॉलम के लिए अनुमत निर्दिष्ट सटीकता से बड़ा मान

  5. Oracle में पैकेज के अंदर एक प्रक्रिया कैसे बनाएं