我有一张有300,000条记录的大桌子.该表具有一个称为“速度”的整数值,并且它的值是从0到100.
在firsts记录中,该值为0,我要删除.我想从查询中删除速度场重复超过10次的记录.例如:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 5 10 12 13 15 20 30 20 15 10 8 5 2 1 0 0 0 0 4 5 10 20 …
[——-删除此———–] ………………………………. ……………………………………. [—— —]<-请勿删除谢谢最佳答案最简单的方法是使用循环.
您可以编写一个遍历记录的存储过程,也可以在数据库外部进行存储过程.如果需要执行一次,我会那样做.如果这是一个连续的过程,最好先确保没有将多余的数据插入数据库中.
无论如何,如果您坚持在纯sql中执行此 *** 作,而没有带循环的存储过程,则可以使用如下查询:
set @groupnum=0;select GroupNum,count(*) as RecsInGroup from( select t1.ID as ID,t1.veLocity as veLocity1,t2.veLocity as veLocity2,if(t1.veLocity<>t2.veLocity,@groupnum:=@groupnum+1,@groupnum) as GroupNum from VeLocitytable as t1 join VeLocitytable as t2 on t1.ID=t2.ID-1) as groupsgroup by GroupNum having RecsInGroup>10
这里会发生什么?
第1步
内部查询只是选择表中的所有记录,而是将数据分成连续的组.
因此,以您的示例为例:
veLocity : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 5 10 12 13 15 20 30 20 15 10 8 5 2 1 0 0 0 0 4 5 10 20Groupnum : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18 18 18 19 20 21 22
它通过将表自身连接起来,链接表中的后续记录来实现.每当左右速度不同时,GroupNum都会增加.否则,它保持不变.
第2步
如果查询被包装在外部查询中并按GroupNum分组,则结果为.同样,使用您的示例将导致以下结果:
GroupNum,RecsInGroup0,15 // !!1,12,13,14,15,16,17,18,19,110,111,112,113,114,115,116,117,118,4 // !!19,120,121,1
通过添加具有RecsInGroup> 10子句,结果变为:
GroupNum,15
现在,使用此GroupNum列表,您可以删除记录.
第三步
通过上面的查询,您可以:
>所有记录的列表,并添加了GroupNum列.
>需要删除的GroupNum的列表.
此时,删除记录应该很容易. 总结
以上是内存溢出为你收集整理的mySQL检索按顺序重复值的记录 全部内容,希望文章能够帮你解决mySQL检索按顺序重复值的记录 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)