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

ROW_NUMBER क्वेरी

create table test
(trip number
,stp  varchar2(1)
,tm   varchar2(10)
,seq  number);

insert into test values (1,     'A',     '1:10',   1);
insert into test values (1,     'B',     '1:16',   2); 
insert into test values (1,     'B',     '1:20',   2);
insert into test values (1 ,    'B',     '1:25',   2);
insert into test values (1 ,    'C',     '1:31',   3);
insert into test values (1,     'B',     '1:40',   4);
insert into test values (2,     'A',     '2:10',   1);
insert into test values (2,     'B',     '2:17',   2);
insert into test values (2,     'C',     '2:20',   3);
insert into test values (2,     'B',     '2:25',   4);

select t1.*
      ,sum(decode(t1.stp,t1.prev_stp,0,1)) over (partition by trip order by tm) new_seq
from  
     (select t.*
            ,lag(stp) over (order by t.tm) prev_stp
      from   test t
      order  by tm) t1
;

  TRIP S TM                SEQ P    NEW_SEQ
------ - ---------- ---------- - ----------
     1 A 1:10                1            1
     1 B 1:16                2 A          2
     1 B 1:20                2 B          2
     1 B 1:25                2 B          2
     1 C 1:31                3 B          3
     1 B 1:40                4 C          4
     2 A 2:10                1 B          1
     2 B 2:17                2 A          2
     2 C 2:20                3 B          3
     2 B 2:25                4 C          4

 10 rows selected 

आप देखना चाहते हैं कि स्टॉप एक पंक्ति और अगली के बीच बदलता है या नहीं। यदि ऐसा होता है, तो आप अनुक्रम को बढ़ाना चाहते हैं। इसलिए पिछले पड़ाव को वर्तमान पंक्ति में लाने के लिए अंतराल का उपयोग करें।

मैंने DECODE का उपयोग इसलिए किया क्योंकि यह NULLs को संभालता है और यह CASE से अधिक संक्षिप्त है, लेकिन यदि आप पाठ्य पुस्तक का अनुसरण कर रहे हैं, तो आपको संभवतः CASE का उपयोग करना चाहिए।

ORDER BY क्लॉज के साथ एक विश्लेषणात्मक फ़ंक्शन के रूप में SUM का उपयोग करने से वह उत्तर मिलेगा जिसकी आप तलाश कर रहे हैं।



  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 में NVL2 फ़ंक्शन

  2. Android को Oracle डेटाबेस से कैसे कनेक्ट करें?

  3. हाइबरनेट पुराने डेटा को hibernate.jdbc.batch_versioned_data के साथ सहेजता है

  4. नेटवर्क इंटरफ़ेस नाम की लंबाई कितनी हो सकती है?

  5. ओरेकल और प्रोग्रामिंग