Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Baris grup Menjaga Urutan nilai

Diperbarui: jawaban dikoreksi sesuai komentar.

Baris dapat dikelompokkan sesuai kebutuhan sedemikian rupa:

-- 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

Contoh di 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. Oracle mendapatkan tanggal yang diformat sebagai string antara dua tanggal

  2. Perintah SQL ORA-00933 tidak berakhir dengan benar tetapi bagus di Pengembang SQL

  3. Pilih count(*) dari beberapa tabel

  4. Perbedaan waktu antar record

  5. Pustaka terkelola ODP.NET tidak menyelesaikan alias, tetapi pustaka 32-bit melakukannya