我在 MySQL 数据库中记录发送电子邮件,我想查找同时发送的重复电子邮件。
此查询工作顺利找到在发送的电子邮件确切的同一时间:
SELECT user_id, template, created_at, COUNT(*)
FROM emails
WHERE sender_id = 08347
GROUP BY user_id, template, created_at
HAVING COUNT(*) > 1;
但是如果我想允许一个时间裕度,比如created_at
+/- 5 秒,我不确定如何在GROUP BY
.
如何选择允许时差的重复电子邮件?
编辑:
可能有 2 封以上的电子邮件在同一时间发送,理想情况下查询将包含这些电子邮件,尽管我意识到这可能会变得复杂,例如,如果有许多相同的电子邮件在一个小时内持续发送一秒钟。
这只是如何实现您想要的示例。但这是相当昂贵的查询。如果你有一张大桌子——这会变得很慢。为了提高性能,我建议创建另一列10_sec_period
并在每次插入时使用一些触发器更新它。最重要的是,这个新列需要添加到某个索引中。
SELECT user_id,
template,
SEC_TO_TIME((TIME_TO_SEC(created_at) DIV 60) * 60) AS 10_sec_period,
COUNT(*)
FROM emails
WHERE sender_id = 08347
GROUP BY user_id, template, 10_sec_period
HAVING COUNT(*) > 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句