ブロッコリーを克服するまでプログラミング

プログラミングとか趣味とかを報告します。

SQLServer : 列の変化点検出

あるテーブル TESTDB の特定カラム(列, DATA_A)に対する、変化点検出SELECT文を考えた。

 

SQLServer 2012以降なら、LAG関数を使用した以下かなと思う。

特定カラム(DATA_A)が前後で変化している場合のIDを選択する。

なお、IDカラムは、時系列もしくは1から順番に振られているユニークな整数、もしくはDATETIME型とする。

 

****************************************************************************

SELECT t.ID

FROM

( SELECT

     ID

     ,DATA_A 

     ,LAG(DATA_A, 1, 0) OVER(ORDER BY ID) AS 'TMP_A'

FROM TESTDB

) t

WHERE t.DATA_A <> t.TMP_A

****************************************************************************

 

以下のように、DATA_A列が 0 → 1, 1 → 0 となった IDが抽出できている。

f:id:atwtama:20180308204642p:plain

 

 

こういう当たり前?なことが、案外、検索してもみつからないから、備忘録として。