Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Grupuj wiersze Zachowując porządek wartości

Aktualizacja: odpowiedź poprawiona zgodnie z komentarzami.

Wiersze można grupować według potrzeb w następujący sposób:

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

Przykład pod adresem 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. DotConnect firmy DevArt dla Oracle kontra dostawca danych ADO.NET firmy DataDirect

  2. Używanie IS NULL lub IS NOT NULL na warunkach przyłączenia — pytanie teoretyczne

  3. Różnica między upuszczaniem a upuszczaniem czyszczenia w Oracle

  4. ORA-12015:nie można utworzyć zmaterializowanego widoku szybkiego odświeżania ze złożonego zapytania

  5. Dodawanie połączonych danych do wyniku zapytania