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

Изберете редове, когато стойността на колоната се променя между датите в Oracle?

Можете да използвате COUNT( DISTINCT code) OVER (PARTITION BY id) аналитична функция, за да получите своя отговор, като използвате само едно сканиране на таблица:

SQL Fiddle

Настройка на схема на Oracle 11g R2 :

CREATE TABLE table_name ( ID, Code, "DATE" ) ASSELECT 1, 'A', DATE '2018-02-19' FROM DUAL UNION ALLSELECT 1, 'B', DATE '2018-02-18 ' ОТ DUAL UNION ALLSELECT 1, 'B', ДАТА '2018-02-17' ОТ DUAL UNION ALLSELECT 1, 'B', ДАТА '2018-02-16' ОТ DUAL UNION ALLSELECT 2, 'A', ДАТА '2018 -02-17' ОТ DUAL UNION ALLSELECT 2, 'B', ДАТА '2018-02-16' ОТ DUAL UNION ALLSELECT 3, 'A', ДАТА '2018-02-17' ОТ DUAL UNION ALLSELECT 3, 'A' , ДАТА '2018-02-16' ОТ DUAL UNION ALLSELECT 4, 'D', ДАТА '2018-02-16' ОТ DUAL; 

Заявка 1 :

SELECT ID, Code, "DATE"FROM ( SELECT t.*, COUNT( DISTINCT code ) OVER ( PARTITION BY id ) AS num_changes FROM table_name t WHERE "DATE" BETWEEN DATE '2018-02-16' И ДАТА '2018-02-19') WHERE num_changes> 1 

Резултати :

<предварителен код>| ID | КОД | ДАТА ||----|------|-----------------------|| 1 | A | 2018-02-19T00:00:00Z || 1 | B | 2018-02-18T00:00:00Z || 1 | B | 2018-02-17T00:00:00Z || 1 | B | 2018-02-16T00:00:00Z || 2 | A | 2018-02-17T00:00:00Z || 2 | B | 2018-02-16T00:00:00Z |

Заявка 2 :

SELECT ID, Code, "DATE"FROM ( SELECT t.*, COUNT( DISTINCT code ) OVER ( PARTITION BY id ) AS num_changes FROM table_name t WHERE "DATE" BETWEEN DATE '2018-02-16' И ДАТА '2018-02-18') WHERE num_changes> 1 

Резултати :

<предварителен код>| ID | КОД | ДАТА ||----|------|-----------------------|| 2 | A | 2018-02-17T00:00:00Z || 2 | B | 2018-02-16T00:00:00Z |

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте Varchar2 в масив Char в Oracle

  2. Поведение по подразбиране за автоматично завършване на JDBC връзката

  3. Как да създадете PL/SQL SYS_REFCURSOR в база данни на Oracle

  4. Няма намерени данни или е възникнала грешка при изключение на твърде много редове по време на групово вмъкване на запис

  5. Perl DBI - стартирайте SQL скрипт с множество изрази