2016-08-03 1 views
-1

J'ai besoin de trouver une requête efficace pour compter le nombre de changements de champs par entrée de table d'historique.Nombre de changements de champ de la table d'historique des requêtes TSQL

Chaque fois que des valeurs de données changent dans la table client, une copie de l'enregistrement est entrée dans la table d'historique.

Je voudrais un moyen de compter le nombre de changements par entrée dans la table d'historique. Chaque champ compare l'entrée actuelle avec l'entrée précédente pour déterminer une différence.

Existe-t-il un bon moyen de le faire? Sans un sproc?

enter image description here

+0

La capture d'écran est utile, mais certains exemples de données attireraient plus d'attention. –

Répondre

0

Vous pouvez commencer quelque chose comme ce qui suit. Je n'ai pas d'environnement SQL Server en ce moment, je ne peux pas vérifier si tout est correct.

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

Cela a fonctionné presque parfaitement, merci. J'avais besoin de changer l'ORDRE PAR GROUP BY à PARTITION BY ORDER BY mais ... vraiment cela m'a aidé. JE VOUS REMERCIE. – Wendi

+0

@Wendi, j'ai mis à jour la réponse avec la syntaxe correcte, heureux que l'aide. – EricZ