Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL - Преброяване на промените в подреден списък

Можете да използвате аналитичните функции LEAD и LAG за достъп до предишен и следващ ред на набор от резултати и след това използвайте това, за да видите дали има промени.

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. Lotus Notes XPages за дизайн и Oracle (или друга RDBMS) за данни

  2. SQL командата не е приключила правилно?

  3. Символът амперсанд (&) се игнорира в Oracle ORDER BY

  4. Не можа да се създаде String Oracle ARRAY от varchar2 в JDBC

  5. Проверете дали текущата дата е между две дати Oracle SQL