SQL отслеживать измененные значения

Я пытаюсь выяснить, какие значения пользователь меняет больше всего. У меня есть таблица пользователей, как это:

SQL отслеживать измененные значения

Это пользовательская таблица, в которой записи не изменяются. Если пользователь что-то меняет, создается новая запись для отслеживания того, что меняют пользователи.

Теперь я хочу получить что-то вроде этого:

SQL отслеживать измененные значения

Я хочу, чтобы имена столбцов (электронная почта, телефон и т. д.) были значениями, чтобы я мог сортировать.

Кто-нибудь знает, как я могу это сделать, пожалуйста?

Обновлено: я использую SSMS и T-SQL

У меня была бы таблица пользователей с одной строкой для каждого пользователя, в которой хранятся текущие значения. Тогда у меня будет триггер для регистрации изменений (одна строка на изменение, в которой хранятся как старые, так и новые значения).

jarlh 05.03.2019 10:38

@jarlh Мне не разрешено вносить изменения в БД.

Lucien Ryter 05.03.2019 10:44

@LucienRyter: SSMS не является «базой данных» или «СУБД». Это приложение, которое может подключаться к базе данных SQL Server для выполнения операторов SQL, и оно не имеет отношения к вопросу.

a_horse_with_no_name 05.03.2019 10:48

@LucienRyter вы не могу обнаруживаете изменения данных без включения отслеживание изменений, добавления триггеров в таблицу или использования таблицы с системной версией.

Panagiotis Kanavos 05.03.2019 10:52

Отслеживание изменений очень легкое, работает во всех версиях и выпусках и может возвращать либо измененные идентификаторы, либо все строки с момента последнего изменения. Это также прозрачно для таблиц и приложений. Триггеры требуют добавления дополнительных таблиц и т. д. Для таблиц с системной версией требуется SQL Server 2016 или более поздней версии.

Panagiotis Kanavos 05.03.2019 10:53

Я не могу понять взаимосвязь между желаемыми результатами и данными выборки.

Gordon Linoff 05.03.2019 13:48

@GordonLinoff Проверьте, например, значения NumberOfKids. Он подсчитывает, сколько раз люди меняли это значение. Первая запись не считается (FirstEntry bool)

Lucien Ryter 05.03.2019 14:56

Обычно нас не волнует общее изменение с начала времен (или когда мы начали отслеживать такие вещи), нас интересует тенденция во времени (и, возможно, пики). Подумайте о том, что вы измеряете, как вы это записываете и как вы собираетесь использовать эту информацию.

SMor 07.03.2019 16:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
8
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выглядит ужасно, но работает:

select * into #q1 from (SELECT Row_number()OVER(ORDER BY i.CreationDate) rn, i.Email, i.Phone, i.Address, i.Phone, i.NumberOfKids
         FROM   user i) as t

SELECT Sum(CASE WHEN a.Email= b.Email THEN 0 ELSE 1 END) as Amount, 'Email' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
UNION ALL
SELECT Sum(CASE WHEN a.Address= b.Address THEN 0 ELSE 1 END) as Amount, 'Address' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
UNION ALL
SELECT Sum(CASE WHEN a.Phone= b.Phone THEN 0 ELSE 1 END) as Amount, 'Phone' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
UNION ALL
SELECT Sum(CASE WHEN a.NumberOfKids= b.NumberOfKids THEN 0 ELSE 1 END) as Amount, 'NumberOfKids' as ColumnName
FROM   #q1 a
       JOIN #q1 b
         ON a.UserID= b.UserID
order by Amount desc
drop table #q1

Только если реальный вопрос отличается от того, что вы задали. Вам вообще не нужен UNION, просто самосоединение Один, WHERE которое проверяет, не изменились ли какие-либо другие поля.

Panagiotis Kanavos 05.03.2019 12:22

Другие вопросы по теме