Предполагая, что вы используете MS SQL, это может быть достигнуто с помощью ROW_NUMBER
. Подробнее про ROW_NUMBER
можно прочитать здесь . PARTITION BY
делит результат на разделы и применяет номера строк к разделам. Итак, применив разделение к ParentId
и отсортировав по Year
по убыванию, данные отсортированы ParentId
по Year
. Затем удалите старые данные, используя условие RowNo = 1
.
Create Table Test(ParentId int, PersonId int, Year int);
INSERT INTO Test values
(1, 1, 2019),
(1, 2, 2020),
(3, 3, 2019),
(3, 4, 2020),
(5, 5, 2019);
SELECT ParentId, PersonId, Year FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY ParentId
ORDER BY Year /* Use PersonId if it fits correctly */ DESC) AS RowNo,
ParentId, PersonId, Year from Test -- Table Name
) E WHERE ROWNo = 1