Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL查询历史记录表字段更改计数_Sql_Tsql_Aggregate_Sql Server 2014_Rollup - Fatal编程技术网

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

TSQL查询历史记录表字段更改计数,sql,tsql,aggregate,sql-server-2014,rollup,Sql,Tsql,Aggregate,Sql Server 2014,Rollup,我需要找到一个有效的查询来计算每个历史表条目的字段更改数 每次客户表中的任何数据值发生更改时,都会在历史记录表中输入一份记录副本 我想要一种方法来计算历史记录表中每个条目的更改数。每个字段将比较当前条目和前一条目以确定差异 有什么好办法吗?没有狂欢 你可以从下面开始。我目前没有SQL Server环境,无法验证是否一切正常 WITH cte AS ( SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY CustomerID ORDE

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

每次客户表中的任何数据值发生更改时,都会在历史记录表中输入一份记录副本

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

有什么好办法吗?没有狂欢


你可以从下面开始。我目前没有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 

屏幕截图有帮助,但一些示例数据会吸引更多的注意力。这几乎完美地工作了,谢谢。我需要将“按组按顺序”更改为“按顺序按分区”,但是。。。这确实有帮助。谢谢。@Wendi,我用正确的语法更新了答案,很高兴能帮上忙。