gpt4 book ai didi

mysql - 如何识别和删除重复行,最近的行除外

转载 作者:行者123 更新时间:2023-11-29 06:16:05 27 4
gpt4 key购买 nike

我在 HeidiSQL 工作,我正在尝试弄清楚如何删除除最近的行之外的所有重复行。 “重复项”之间存在一些细微差别,但只要超过四个特定值相同(即 UserID、ContactID、SMSID 和 EventID),该行就被视为重复项。我需要根据最近的行(由 CreatedDate 标识)删除它们。

以下查询标识这些行:

SELECT a.UserID, a.ContactID, a.SMSID, a.EventID, CreatedDate
FROM WhenToText a
JOIN (SELECT UserID, ContactID, SMSID, EventID
FROM WhenToText
GROUP BY UserID, ContactID, SMSID, EventID
HAVING COUNT(*) > 1 ) b
ON a.UserID = b.UserID
AND a.ContactID = b.ContactID
AND a.SMSID = b.SMSID
AND a.EventID = b.EventID
ORDER BY UserID, ContactID, SMSID, EventID, CreatedDate DESC

但是,我不确定在确定这些重复项后如何删除它们。

这是一些示例数据:

enter image description here

最佳答案

这是一种方法:

DELETE FROM WhenToText w1
INNER JOIN
(
SELECT UserID, ContactID, SMSID, EventID, MAX(CreatedDate) AS MaxDate
FROM WhenToText
GROUP BY UserID, ContactID, SMSID, EventID
) w2
ON w1.UserID = w2.UserID AND w1.ContactID = w2.ContactID AND w1.SMSID = w2.SMSID
AND w1.EventID = w2.EventID
AND w1.CreatedDate != w2.MaxDate

这将删除给定 (UserID, ContactID, SMSID, EventID) 组的所有记录,其 CreatedDate 不是最新的。请记住,如果共享最新的 CreatedDate,这可能会为每个组留下多个记录。

如果您想先测试该查询的哪个记录,以查看哪些记录将被删除,您可以将 DELETE FROM WhenToText w1 替换为 SELECT w1.* FROM WhenToText w1.

这是一个指向 SQL Fiddle 的链接,它演示了查询将如何识别要删除的记录:

SQLFiddle

关于mysql - 如何识别和删除重复行,最近的行除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35857570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com