У меня есть таблица active_user
с 4 столбцами в базе данных SQL Server.Я хочу хранимую процедуру для очистки данных.
В данных, показанных ниже, я хочу обновить isActive
до 0 для всех уникальных (firstName,lastName, isActive
), где isActive = 1
и lastModified
<<code>lastModified из (firstName, lastName, isActive
) сгруппированных упорядоченныхDesc Top 1.
Пример данных перед выполнением хранимой процедуры:
firstName lastName isActive lastModified
-----------------------------------------------------
foo bar 1 2019-11-16 06:43:19.77
foo bar 1 2018-11-16 06:43:19.77
foo bar 1 2017-11-16 06:43:19.77
foo bar 1 2016-11-16 06:43:19.77
foo bar 0 2015-11-16 06:43:19.77
foo bar 0 2014-11-16 06:43:19.77
foo1 bar1 1 2019-11-16 06:43:19.77
foo1 bar1 1 2018-11-16 06:43:19.77
foo1 bar1 0 2017-11-16 06:43:19.77
foo2 bar2 1 2018-11-16 06:43:19.77
foo2 bar2 0 2017-11-16 06:43:19.77
Тот же набор данных после выполнения хранимой процедуры:
firstName lastName isActive lastModified
------------------------------------------------------
foo bar 1 2019-11-16 06:43:19.77
foo bar 0 2018-11-16 06:43:19.77 //updated
foo bar 0 2017-11-16 06:43:19.77 //updated
foo bar 0 2016-11-16 06:43:19.77 //updated
foo bar 0 2015-11-16 06:43:19.77
foo bar 0 2014-11-16 06:43:19.77
foo1 bar1 1 2019-11-16 06:43:19.77
foo1 bar1 0 2018-11-16 06:43:19.77 //updated
foo1 bar1 0 2017-11-16 06:43:19.77
foo2 bar2 1 2018-11-16 06:43:19.77
foo2 bar2 0 2017-11-16 06:43:19.77
Всего обновлено 4 строки.
Вот моя попытка псевдо SQL:
update active_user
set isActive = 0 in (SELECT unique(firstName, lastName, isActive)
where isActive = 1
and lastModified < (select TOP 1 distinct(firstName, lastName, isActive)
where isActive = 1)
group by (firstName, lastName, isActive) orderBy))
Я ищу способ решения этой проблемы, чтобы она могла быть выполнена элегантно.