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

Oracle विश्लेषणात्मक कार्य - एक विंडोिंग क्लॉज को रीसेट करना

यह थोड़ा जटिल है। rank() का उपयोग करने के बजाय या इसी तरह, lag() . का उपयोग करें देखने के लिए जब कुछ बदलता है। फिर ध्वज का संचयी योग करें।

select dept, date1,
       CASE WHEN StartFlag = 0 THEN 1
            ELSE 1+StartFlag+NVL(lag(StartFlag) over (order by date1),0)
       END as rnk
from (select t1.*,
             (case when dept = lag(dept) over (order by date1)
                   then 1
                   else 0
              end) as StartFlag
      from t1
     ) t1
order by date1;

यहाँ SQLFiddle है।

संपादित करें:

यह गॉर्डन मेरा अपना उत्तर संपादित कर रहा है। उफ़। मूल प्रश्न वहां के रास्ते का 90% था। इसने समूहों . की पहचान की जहाँ संख्याएँ बढ़नी चाहिए, लेकिन समूहों के भीतर संख्याएँ निर्दिष्ट नहीं कीं। मैं इसे row_number() . के दूसरे स्तर के साथ करूँगा के रूप में:

select dept, date1,
       row_number() over (partition by dept, grp order by date1) as rnk
from (select dept, date1, startflag,
             sum(StartFlag) over (partition by dept order by date1) as grp
      from (select t1.*,
                   (case when dept = lag(dept) over (order by date1)
                         then 0
                         else 1
                    end) as StartFlag
            from t1
           ) t1
     ) t1
order by date1;

तो, समग्र विचार निम्नलिखित है। सबसे पहले lag() use का इस्तेमाल करें यह निर्धारित करने के लिए कि एक समूह कहाँ से शुरू होता है (अर्थात, जहाँ एक तिथि से दूसरी तिथि में विभाग परिवर्तन होता है)। फिर, संचयी योग करके इन्हें "समूह आईडी" असाइन करें। ये वे रिकॉर्ड हैं जिनकी गणना की जानी है। अंतिम चरण row_number() . का उपयोग करके उनकी गणना करना है ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में varchar(max) के बराबर क्या है?

  2. वैश्विक अस्थायी तालिका में डेटा की अवधि?

  3. DBMS_JOB बनाम DBMS_SCHEDULER

  4. COMPOSE() Oracle में फंक्शन

  5. Oracle विभाजन सूचकांक