2017-09-21 10 views
1

次のような表を検討してください。Distinct行を選択し、非固有識別子を含める

ID Value Change_Date 
1 A  1/1/2017 
1 B  1/2/2017 
1 B  1/3/2017 
2 C  1/1/2017 
2 C  1/3/2017 
3 D  1/1/2017 
3 E  1/3/2017 
3 F  1/4/2017 
3 D  1/10/2017 

Iを効果的に明確にし、SELECT文を実行したいが、異なる行の最初の時系列発生のCHANGE_DATE値を含むであろう。したがって、上記の表は次のようにレンダリングされます。

ID Value Change_Date 
1 A  1/1/2017 
1 B  1/2/2017 
2 C  1/1/2017 
3 D  1/1/2017 
3 E  1/3/2017 
3 F  1/4/2017 
3 D  1/10/2017 

これはOracleではリモートでも可能ですか?私は、監査テーブルから大量のダミー更新を取り除こうとしていますが、値が変更されたときに表示できるようにchange_dateが必要です。

select distinct id, value from my_table 

のようなクエリでは、明らかに私が情報をシード取得しますが、私は適切な日付に戻ってそれを結ぶ必要があります。私はおそらくこれと分(change_date)を使用することができますが、それはクエリがid 3の最初の行がid 3の最後の行と同じであることを意味しますが、これは正しくありません。

EDIT:私はIDと値の単純な区別がないことに注意してください。 ID 3のように以前の値に戻ったときもインクルードする必要があります。ID 3の4つの値はすべて出力に保存されます。

答えて

1

複数のIDと値のペアが一列に並んでいる場合にのみ、最初の行が必要なようです。用途:lag()

select t.* 
from (select t.*, 
      lag(value) over (partition by id order by change_date) as prev_value 
     from t 
    ) t 
where prev_value is null or prev_value <> value; 
関連する問題