【问题标题】:MYSQL: how to remove SIMILAR database rows based on username and timestampMYSQL:如何根据用户名和时间戳删除 SIMILAR 数据库行
【发布时间】:2020-02-06 21:29:38
【问题描述】:

我有一个用于记录的数据库表。我想搜索表格以查找同一用户在同一天执行特定操作的所有条目,并且只保留其中一个。

我认为需要用到的列名是: “activity_action” - 所寻求的操作是“每日网站访问” "user_email" - 在同一天寻找同一个用户 “activity_timestamp” - 我想忽略时间并检查操作是否在同一天

【问题讨论】:

  • 请提供样本数据和预期结果。另外,您是在寻找delete 查询还是select

标签: mysql sql duplicates sql-delete


【解决方案1】:

如果您正在寻找删除语句,这是在 MySQL 中执行此操作的一种方法:

delete t
from mytable t
inner join mytable t1
    on  t1.user_email = t.user_email
    and t1.activity_action = t.activity_action
    and date(t1.activity_timestamp) = date(t.activity_timestamp)
    and t1.activity_timestamp < t.activity_timestamp
where t.activity_action =  'Daily Website Access'

这将删除具有寻找的activity_action 的记录,以及具有相同操作和电子邮件的另一条记录,该记录发生在同一天,并且其时间戳更小。换句话说,这会删除重复的 par action/user/day,同时保留最早的。

【讨论】:

  • 我强烈建议先将其编写为 SELECT 语句,验证返回的行,将返回的行保存为备份,然后将 SELECT 转换为 DELETE 语句。
  • 我认为你完美地回答了我的问题。我唯一的问题是桌子太大了,我无法一次运行所有这些。我试图分成更小的块,在最初的测试中,这正是我所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2020-08-18
  • 2022-10-14
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多