2016-08-03 3 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

Смежные вопросы