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

ROW_NUMBER заявка

create table test
(trip number
,stp  varchar2(1)
,tm   varchar2(10)
,seq  number);

insert into test values (1,     'A',     '1:10',   1);
insert into test values (1,     'B',     '1:16',   2); 
insert into test values (1,     'B',     '1:20',   2);
insert into test values (1 ,    'B',     '1:25',   2);
insert into test values (1 ,    'C',     '1:31',   3);
insert into test values (1,     'B',     '1:40',   4);
insert into test values (2,     'A',     '2:10',   1);
insert into test values (2,     'B',     '2:17',   2);
insert into test values (2,     'C',     '2:20',   3);
insert into test values (2,     'B',     '2:25',   4);

select t1.*
      ,sum(decode(t1.stp,t1.prev_stp,0,1)) over (partition by trip order by tm) new_seq
from  
     (select t.*
            ,lag(stp) over (order by t.tm) prev_stp
      from   test t
      order  by tm) t1
;

  TRIP S TM                SEQ P    NEW_SEQ
------ - ---------- ---------- - ----------
     1 A 1:10                1            1
     1 B 1:16                2 A          2
     1 B 1:20                2 B          2
     1 B 1:25                2 B          2
     1 C 1:31                3 B          3
     1 B 1:40                4 C          4
     2 A 2:10                1 B          1
     2 B 2:17                2 A          2
     2 C 2:20                3 B          3
     2 B 2:25                4 C          4

 10 rows selected 

Искате да видите дали стопът се променя между един ред и следващия. Ако е така, искате да увеличите последователността. Затова използвайте забавяне, за да поставите предишната спирка в текущия ред.

Използвах DECODE поради начина, по който обработва NULL и е по-сбит от CASE, но ако следвате учебника, вероятно трябва да използвате CASE.

Използването на SUM като аналитична функция с клауза ORDER BY ще даде отговора, който търсите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извикване на недефинирана функция oci_connect()

  2. Oracle Rolling или Running totals по месеци

  3. cd:-M:невалидна опция

  4. показване на персонализиран sql текст от резултата от колоната на таблицата

  5. SQL заявка за получаване на броя на думите в таблицата