查找并删除sql记录,如果它们在8小时内发生(除了最近的记录)

5sxhfpxr  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(342)

我有一个sql表,其中包含一些要删除的重复记录。拆卸应在两种情况下同时进行:
记录在以下条件下具有相同的值 score
记录发生在8小时之内。
删除的记录应该是所有匹配记录中日期较旧的记录,因此新的查询结果中应该只显示匹配记录中最近的记录。
到目前为止,我只设法创建了一个代码来删除这样的重复,只有当记录发生在一个月的同一天,所以它丢失了任何连续两天的记录-如何解决这个问题?
原始数据库看起来像:

user_id  score             visited_at           visit_id  
-------  ----------------  -------------------  ----------
     22  75.0              2018-05-14 23:39:14         169
     22  75.0              2018-05-14 18:36:26         168
     22  75.0              2018-05-13 02:04:46         166
      2  55.0              2018-05-12 18:38:24         165
     22  78.0              2018-05-12 18:14:34         164
     22  75.0              2018-05-12 18:45:12         164
     22  55.0              2018-05-08 12:36:12         161

部分删除重复项的sql命令:

SELECT COUNT(*) AS ct
     , it.user_id
     , it.score
     , UNIX_TIMESTAMP(CONVERT_TZ(it.visited_at,'+00:00',@@global.time_zone)) DIV 86400 AS diff
     , it.visited_at
     , it.visit_id
  FROM `vw_items` it
 GROUP 
    BY user_id
     , score
     , diff 
 ORDER 
    BY visited_at DESC

结果:

ct  user_id            score    diff  visited_at           visit_id  
------  -------  ----------------  ------  -------------------  ----------
     2       22  75.0               17665  2018-05-14 23:39:14         169
     1       22  75.0               17664  2018-05-13 02:04:46         166
     1        2  55.0               17663  2018-05-12 18:38:24         165
     1       22  78.0               17663  2018-05-12 18:14:34         164
     1       22  75.0               17663  2018-05-12 18:45:12         164
     1       22  55.0               17659  2018-05-08 12:36:12         161

但我需要一个命令来删除记录:

1       22  75.0               17663  2018-05-12 18:45:12         164

因为它与另一个记录有相同的分数,那是最近的,发生在该记录8小时内:

1       22  75.0               17664  2018-05-13 02:04:46         166
ktecyv1j

ktecyv1j1#

我相信你要找的是date\u子函数

DATE_SUB(it.visited_at, INTERVAL 8 HOUR)

这将创建一个datetime,您可以在给定记录的8小时内进行比较以查找内容。我想写更多的答案,但看起来这是你唯一遗漏的部分。

相关问题