2016-08-03 13 views
-1

履歴テーブルエントリごとのフィールドの変更回数をカウントする効率的なクエリを見つける必要があります。TSQLクエリの履歴テーブルフィールドの変更回数

顧客テーブルでデータ値が変更されるたびに、レコードのコピーが履歴テーブルに入力されます。

エントリごとの変更数を履歴テーブルに数える方法があります。各フィールドは、現在のエントリと以前のエントリとを比較して差異を判断する。

これを行うには良い方法がありますか? sprocなしで?

enter image description here

+0

スクリーンショットが役立ちますが、いくつかのサンプルデータが注目を集めます。 –

答えて

0

次のような何かを始めることができます。私はこの時点でSQL Server環境を持っていない、すべてが正しいかどうかを確認することはできません。

WITH cte AS (
     SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY ID) 
     FROM CustomerHistory 
    ) 
    SELECT 
     c1.*, 
     FieldChangeCount = 
      (CASE WHEN c1.ServiceLevel <> c2.ServiceLevel THEN 1 ELSE 0 END) 
      + 
      (CASE WHEN c1.Status <> c2.Status THEN 1 ELSE 0 END)  
    FROM cte c1 
    LEFT JOIN cte c2 
      ON c1.CustomerID = c2. CustomerID 
      AND c2.rn = c1.rn - 1 
    ORDER BY c1.LogID 
+0

これはほぼ完全に機能しました。ありがとうございます。私はORDER BY GROUP BYをPARTITION BY ORDER BYに変更する必要があったが...本当に助けになった。ありがとうございました。 – Wendi

+0

@Wendi、正しい構文で答えを更新しました。うれしいことです。 – EricZ