数据库查询及随机更新的那些事情

最近几天实验室一直需要我来造数据,在开始的过程中遇到了些问题,但是最终都还是顺利的解决了,感觉挺容易的,下面说下我在这个过程中遇到的问题及方法。

1、每条船有一个ID即MMSI,但是每一条船在一个月内的数据有多条,数据库中2014.11月有4亿条数据,几十万艘船,现需要随机抽取1000多条船在某一经纬度范围内的数据,由于是随机的,所以用mysql里的Limited可以作为随机限定,语句如下:

SELECT * FROM table WHERE MMSI IN(SELECT MMSI FROM L0_Clean_AIS_Dynamic_Temp WHERE Latitude>=-12000000&&Latitude<=12000000&&Record_Datetime>1417363200&&Record_Datetime<1420041600)LIMIT 3365482

当然这是我之前做过测试的,知道大约300万数据里有1000多条船,其实这句话稍微合理的做法应该和下面第2条语句类似。


2、现在需要从这选择出来的1000条船中,再选择出100多条船的数据,querylimited即为1000多条船的表,当然这个语句和以上的类似的,但是写法有变,得到了126船:

SELECT  *  FROM querylimited  WHERE MMSI  NOT IN (SELECT MMSI FROM (SELECT  DISTINCT MMSI FROM querylimited  LIMIT 126)as t)


由于在where 限定语句后面不能直接使用LIMIT,所以需要在后面加上 as it 即将中间的查询结果,单独作为一个表t


3、

SELECT  *  FROM query126  WHERE MMSI  NOT IN (SELECT MMSI FROM (SELECT  DISTINCT MMSI FROM query126  LIMIT 38)as t)

4、

SELECT  *  FROM query126  WHERE MMSI   IN (SELECT MMSI FROM (SELECT  DISTINCT MMSI FROM query126  LIMIT 38)as t)

5、

UPDATE query88 SET latitude= latitude+RAND()*120000 AND lontitude=lontitude+RAND()*120000

这句话,写错了,用and,并不能直接更新想要的数据库,而是将纬度那一列值赋为0了,如果想同时更新两列,需要用逗号,而不是and,这句话应改为:

UPDATE query88 SET latitude= latitude+RAND()*120000 ,lontitude=lontitude+RAND()*120000



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值