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

Oracle nhận hàng trong đó giá trị cột đã thay đổi

Bạn có thể sử dụng LAG() chức năng cửa sổ để nhìn vào hàng trước đó và so sánh nó. Nếu dữ liệu của bạn là:

create table t2 (
  id number(6),
  cctr varchar2(10),
  date1 date
);

insert into t2 (id, cctr, date1) values (1, '2C', date '2018-08-01');
insert into t2 (id, cctr, date1) values (2, '2C', date '2018-07-02');
insert into t2 (id, cctr, date1) values (3, '2C', date '2017-05-04');
insert into t2 (id, cctr, date1) values (4, '2B', date '2017-03-02');
insert into t2 (id, cctr, date1) values (5, '2B', date '2017-01-01');
insert into t2 (id, cctr, date1) values (6, 'UC', date '2016-11-23');

Sau đó, truy vấn sẽ là:

select * from t2 where date1 = (
  select max(date1)
    from (
    select 
      id, date1, cctr, lag(cctr) over(order by date1 desc) as prev
      from t2
    ) x  
    where prev is not null and cctr <> prev
);

Kết quả:

ID       CCTR        DATE1    
-------  ----------  -------------------
4        2B          2017-03-02 00:00:00  


  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àm cách nào để thực hiện FULL OUTER JOIN trong ORACLE bằng toán tử '+'?

  2. Sự khác biệt về thời gian giữa các bản ghi

  3. Câu lệnh DDL trong PL / SQL?

  4. Tại sao OCI8 / Oracle oci_bind_array_by_name của PHP không hoạt động với tôi?

  5. Các khái niệm cơ bản của JDBC, Pooling và Threading