清洁重复数据并保留最大数据

时间:2019-05-29 16:35:27

标签: sql-server

我有一个包含重复项的表,我需要保留最大数据并删除其余数据。由于要求,我无法更改日期字段格式,但出现转换错误。有什么想法吗?

DELETE from MAIN_TBL
WHERE ID NOT IN 
(
select * from
(SELECT MAX(updated_on)
FROM MAIN_TBL
GROUP BY widget_tag, ID) as TEMP
)

错误=从字符串转换日期和/或时间时转换失败。

2 个答案:

答案 0 :(得分:2)

如果要删除每个widget_tag中除最新行以外的所有内容,可以使用:

WITH cte AS (
  SELECT *, ROW_NUMBER() OVER(PARITITION BY widget_tag ORDER BY updated_on DESC) rn
  FROM MAIN_TBL
)
DELETE FROM cte WHERE rn <> 1;

答案 1 :(得分:0)

您可以使用EXISTS:

DELETE t
from MAIN_TBL t
WHERE EXISTS (
  SELECT 1 FROM MAIN_TBL
  WHERE id = t.id and widget_tag = t.widget_tag and updated_on > t.updated_on
)

请参见demo