TSQL查询历史表字段更改计数

时间:2016-08-03 17:52:54

标签: sql tsql aggregate sql-server-2014 rollup

我需要找到一个有效的查询来计算每个历史表条目的字段更改次数。

每次客户表中的任何数据值发生变化时,记录的副本都会输入到历史记录表中。

我想要一种方法来计算历史表中每个条目的更改数量。每个字段将比较当前条目与前一个条目以确定差异。

这样做有好办法吗?没有sproc?

enter image description here

1 个答案:

答案 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