我有一个包含重复项的表,我需要保留最大数据并删除其余数据。由于要求,我无法更改日期字段格式,但出现转换错误。有什么想法吗?
DELETE from MAIN_TBL
WHERE ID NOT IN
(
select * from
(SELECT MAX(updated_on)
FROM MAIN_TBL
GROUP BY widget_tag, ID) as TEMP
)
错误=从字符串转换日期和/或时间时转换失败。
答案 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。