如何删除表中的记录,以便每分钟读取一次?

最后发布: 2015-10-14 10:53:41


问题

我的mysql数据库中有一张存储gps读数的表。 它存储在不同时间获取的不同用户的读数:

在此处输入图片说明

每位用户每分钟应包含一个读数。 但是,由于应用程序中的一个错误会收集读数,因此有时每位用户每秒会有一个读数,这对于我们的要求而言是太多数据。

有没有一种方法可以使用查询从表中删除行,以使每个用户每分钟读取的内容不超过一个? 如果可能,我想避免编写程序来执行此操作!

谢谢!

mysql sql
回答

首先要注意的是,从表中删除很多记录可能是非常无效的。 通常,最好重新创建表(或新表):

create table new_gps as
    select gps.*
    from gps join
         (select userid, min(dt) as mindt
          from gps
          group by userid, floor(time_to_sec(dt) / 60)
         ) gpsmin
         on gps.userid = gpsmin.userid and gps.dt = gpsmin.mindt;

您可以对删除使用相同的想法:

delete gsp
    from gps left join
         (select userid, min(dt) as mindt
          from gps
          group by userid, floor(time_to_sec(dt) / 60)
         ) gpsmin
         on gps.userid = gpsmin.userid and gps.dt = gpsmin.mindt
    where gspmin is null;


回答

一种更简单的方法是使用IGNORE Option在dt列上设置唯一键 ,因此mysql会保留所有重复的行,以防止新重复。

唯一要做的是:

ALTER IGNORE TABLE gsp ADD UNIQUE KEY (dt);