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

SQL - Policz liczbę zmian w uporządkowanej liście

Możesz użyć funkcji analitycznych LEAD i LAG aby uzyskać dostęp do poprzedniego i następnego wiersza zestawu wyników, a następnie użyć go, aby sprawdzić, czy są zmiany.

SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2    select date '2011-10-22' dt, 3.2 price from dual union all
  3    select date '2011-10-23', 3.4 from dual union all
  4    select date '2011-10-24', 3.4 from dual union all
  5    select date '2011-10-25', 3.5 from dual union all
  6    select date '2011-10-26', 3.4 from dual union all
  7    select date '2011-10-27', 3.2 from dual union all
  8    select date '2011-10-28', 3.2 from dual
  9  )
 10  select sum(is_change)
 11    from (
 12      select dt,
 13             price,
 14             lag(price) over (order by dt) prior_price,
 15             (case when lag(price) over (order by dt) != price
 16                   then 1
 17                   else 0
 18               end) is_change
 19*       from t)
SQL> /

SUM(IS_CHANGE)
--------------
             4


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Udowodnienie równoważności zapytań SQL

  2. Jak mogę zaktualizować wiersze, które nie są dopasowane w ŹRÓDŁO, wykonując MERGE w Oracle SQL?

  3. cx_Oracle przekroczenie limitu czasu

  4. SQL:wstawianie wiersza dla brakujących miesięcy

  5. Czy Oracle SYS_GUID() UUID RFC 4122 jest zgodny?