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

मूल्यों के क्रम को ध्यान में रखते हुए समूह पंक्तियाँ

अपडेट किया गया: टिप्पणियों के अनुसार उत्तर सही किया गया।

पंक्तियों को इस तरह से आवश्यकतानुसार समूहीकृत किया जा सकता है:

-- leave only first rows of each group and substitute col2 with a sum.
select 
  dateno, 
  col1, 
  group_sum as col2 
from (
  -- Get sum of col2 for each bucket 
  select 
    dateno, 
    col1, 
    is_start, 
    sum(col2) over (partition by bucket_number) group_sum
  from (
    -- divide rows into buckets based on previous col1 change count
    select
      dateno, col1, col2, is_start, 
      sum(is_start) over(order by dateno rows unbounded preceding) bucket_number
    from (
      -- mark rows with change of col1 value as start of new sequence 
      select
        dateno, col1, col2,
        decode (nvl(prev_col1, col1||'X'), col1, 0, 1) is_start
      from (
        -- determine for each row value of col1 in previous row. 
        select 
          dateno, 
          col1, 
          col2,
          lag(col1) over (order by dateno)  prev_col1
        from t 
      )  
    )  
  )
)
where is_start = 1
order by dateno

उदाहरण 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. CLOB के साथ काम करने के लिए UTL_MATCH जैसा कार्य

  2. पुनरावर्ती SQL स्तरों की अधिकतम संख्या (50) पार हो गई

  3. DBMS_STATS के साथ उपयोगकर्ता-परिभाषित रूटीन, भाग II

  4. ओरेकल एसक्यूएल कोड ऑनलाइन चलाएं

  5. SQL:दो तालिकाओं का संघ जिसमें पूर्ण स्तंभ मिलान नहीं है