Найти записи на основе идентификатора, сравнить дату и обновить ту, которая имеет самую старую дату - PullRequest
0 голосов
/ 10 октября 2019

У меня есть таблица, назовем ее UserTable.

enter image description here

Что я хотел бы сделать, это:

  • Найти дубликатUserID
  • Сравните StartDate и обновите запись с самой старой StartDate, заполнив EndDate (текущая дата минус 1)
  • Сделайте это для всех повторяющихся записей в таблице

Конечный результат должен выглядеть следующим образом:

enter image description here

Я получил его до:

UPDATE UserTable
    SET EndDate = GETDATE()-1
WHERE EndDate IS NULL AND StartDate < (GETDATE()) AND
(UserID) in (
  select UserID 
  from   UserTable
  group  by UserID
  having count(*) > 1)

Единственное, что я не могу понять, это какобновите только ту, у которой самая старая StartDate. На основе приведенного выше кода все найденные записи обновляются.

1 Ответ

0 голосов
/ 10 октября 2019

Я не уверен, почему вы хотите обновить только эту одну запись. Но удобный подход - использовать обновляемый CTE:

with toupdate as (
      select ut.*,
             row_number() over (partition by userid order by startdate) as seqnum
      from UserTable ut
     )
update toupdate
    set EndDate = dateadd(day, -1, getdate())
    where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...