Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle mendapatkan baris di mana nilai kolom berubah

Anda dapat menggunakan LAG() jendela berfungsi untuk mengintip baris sebelumnya dan membandingkannya. Jika data Anda:

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');

Maka pertanyaannya adalah:

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
);

Hasil:

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. Kesalahan Pemicu Oracle PL/SQL

  2. Di PL/SQL, bagaimana Anda memperbarui baris berdasarkan baris berikutnya?

  3. Bagaimana Saya Dapat Mencegah Koneksi Otomatis Berulang ke Database Oracle?

  4. Memetakan satu kelas Entitas ke dua database yang berbeda (Oracle dan Ingres)

  5. Bagaimana cara menempatkan nilai default untuk setiap kolom dalam tabel?