Вы можете использовать Count
с partition by
, чтобы найти и вставить дубликаты записей в таблицу answersArchive
, как показано ниже.
1 - Найти дубликат и вставить в answersArchive
таблицу
--copy the duplicate records
;WITH cte
AS (SELECT id,
answer,
country_id,
question_id,
updated,
Count(*)
OVER(
partition BY question_id ) ct
FROM answers
WHERE country_id = 15)
INSERT INTO answersarchive
SELECT id,
answer,
country_id,
question_id,
updated
FROM cte
WHERE ct > 1 --Give you duplicate records
2 - Удалить все дубликаты, кроме самого последнего.
Вы можете использовать CTE
, чтобы удалить записи. Чтобы найти дубликаты записей, вы можете использовать ROW_NUMBER()
с PARTITION BY question_id
, как в следующем запросе.
;WITH cte
AS (SELECT id,
answer,
country_id,
question_id,
updated,
Row_number()
OVER(
partition BY question_id
ORDER BY updated DESC) RN
FROM answers
WHERE country_id = 15)
DELETE FROM cte
WHERE rn > 1