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

时间:2015-10-14 10:53:41

标签: mysql sql

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

enter image description here

每位用户每分钟应包含一次阅读。但是,由于应用程序中收集读数的错误,有时每个用户每秒读取一次,这对我们的要求来说太多了。

有没有办法可以使用查询从表中删除行,这样每个用户每分钟读数不会超过一个?我希望尽可能避免编写程序来执行此操作!

谢谢!

2 个答案:

答案 0 :(得分:1)

首先请注意,从表中删除大量记录可能非常不具备性能。通常,最好只是重新创建表(或新表):

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;

答案 1 :(得分:0)

更简单的方法是使用 IGNORE 选项在dt列上设置唯一键,这样mysql会删除所有重复的行并阻止它进行新的重复。

唯一要做的是:

find -> [ find3  ]
        [ old2 --]--> [ find2  ]
                      [ old1 --]--> [ find1 ]
                                    [ null  ]