Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ROW_NUMBER truy vấn

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 

Bạn muốn xem liệu điểm dừng có thay đổi giữa hàng này và hàng tiếp theo hay không. Nếu có, bạn muốn tăng trình tự. Vì vậy, hãy sử dụng độ trễ để đưa điểm dừng trước đó vào hàng hiện tại.

Tôi đã sử dụng DECODE vì cách nó xử lý NULL và ngắn gọn hơn CASE, nhưng nếu bạn đang theo dõi sách văn bản, có lẽ bạn nên sử dụng CASE.

Sử dụng SUM làm hàm phân tích với mệnh đề ORDER BY sẽ đưa ra câu trả lời mà bạn đang tìm kiếm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi trên trình kích hoạt ORACLE

  2. Khai báo mảng động trong Oracle PL / SQL

  3. Một bảng vẫn tồn tại khi bị rơi

  4. ORA-28000:lỗi tài khoản bị khóa thường xuyên xảy ra

  5. Làm thế nào để hiển thị bản ghi có giá trị cao nhất trong Oracle?