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

अवधि के अनुसार Oracle SQL पंक्ति संयोजन

यह एक प्रकार की गैप्स-एंड-आइलैंड समस्या है। आप lag() . का उपयोग कर सकते हैं और फिर एक संचयी राशि:

select id, min(laufd), max(nextdt),
       row_number() over (partition by id order by min(laufd)) as period
from (select t.*,
             sum(case when prev_nextdt >= laufd - interval '2' day then 0 else 1 end) over
                 (partition by id order by order_row) as grp
      from (select t.*,
                   lag(nextdt) over (partition by id order by order_row) as prev_nextdt
            from t
           ) t
     ) t
group by grp, id;

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

यदि मान स्ट्रिंग के रूप में संग्रहीत हैं, तो उपयोग करें:

select id, min(laufd), max(nextdt),
       row_number() over (partition by id order by min(laufd)) as period
from (select t.*,
             sum(case when prev_nextdt >= laufd - interval '2' day then 0 else 1 end) over
                 (partition by id order by order_row) as grp
      from (select t.id, t.order_row, -- any other columns you need
                   to_date(laufd, 'YYYYMMDD') as laufd,
                   to_date(nextdt, 'YYYYMMDD') as next_dt,
                   lag(to_date(nextdt, 'YYYYMMDD')) over (partition by id order by order_row) as prev_nextdt
            from t
           ) t
     ) t
group by grp, id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डिकोड फ़ंक्शन के लिए वैकल्पिक

  2. Mac OS X पर ROracle स्थापित करना - Oracle से क्या आवश्यक है?

  3. त्रुटि ORA-00937 क्यों हो रही है

  4. तत्काल परिवर्तन अनुक्रम निष्पादित करें काम नहीं कर रहा है

  5. Oracle क्वेरी आउटपुट को json में बदलें (Oracle / NodeJS)