【问题标题】:TSQL query history table field change countTSQL查询历史表字段更改计数
【发布时间】:2016-12-09 14:03:33
【问题描述】:

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

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

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

有什么好办法吗?没有存储过程?

【问题讨论】:

  • 截图有帮助,但一些示例数据会引起更多关注。

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


【解决方案1】:

您可以按以下方式开始。我目前没有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 

【讨论】:

  • 这工作几乎完美,谢谢。我需要将 ORDER BY GROUP BY 更改为 PARTITION BY ORDER BY 但是……这确实有帮助。谢谢。
  • @Wendi,我用正确的语法更新了答案,很高兴得到帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2015-01-18
  • 2012-12-16
  • 1970-01-01
  • 2013-03-17
相关资源
最近更新 更多