sql >> データベース >  >> RDS >> Oracle

Oracleは、列の値が変更された行を取得します

    LAG()を使用できます 前の行をのぞいて比較するウィンドウ関数。データが次の場合:

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

    その場合、クエリは次のようになります。

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

    結果:

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


    1. DUP_VAL_ON_INDEXをトリガーする値をキャプチャします

    2. PostgreSQLでは、citextのパフォーマンスに関する奇妙な問題はありますか?

    3. ユーザー'[メール保護]'のアクセスが拒否されました(パスワード:NOを使用)

    4. すべての製品、カテゴリ、メタデータを取得するSQLクエリwoocommerce / wordpress