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. как да използвате tns записи с драйвери за макромедия за Oracle

  2. Как да използвате таблица с числа в оператора SELECT INTO

  3. как да увелича изходната дължина на колона sqlplus?

  4. Как да разберете URL адреса на базата данни на Oracle?

  5. При влизане в режим на готовност е получена грешка 1033