我的mysql数据库中有一个存储gps读数的表。它存储在不同时间拍摄的不同用户的读数:
每位用户每分钟应包含一次阅读。但是,由于应用程序中收集读数的错误,有时每个用户每秒读取一次,这对我们的要求来说太多了。
有没有办法可以使用查询从表中删除行,这样每个用户每分钟读数不会超过一个?我希望尽可能避免编写程序来执行此操作!
谢谢!
答案 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 ]