广告
返回顶部
首页 > 资讯 > 数据库 >MySQL怎么计算相邻两行某列差值
  • 281
分享到

MySQL怎么计算相邻两行某列差值

2024-04-02 19:04:59 281人浏览 安东尼
摘要

本篇内容主要讲解“Mysql怎么计算相邻两行某列差值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql怎么计算相邻两行某列差值”吧!   背景   我

本篇内容主要讲解“Mysql怎么计算相邻两行某列差值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习mysql怎么计算相邻两行某列差值”吧!

  背景

  我们在司机的手机APP里预置了定时上报GPS数据的功能,功能设置为了APP每15秒收集一次GPS定位地址,然后每收集到10次就上报到服务器端持久化。但因为APP非安卓系统集成,而是由我方自主提供并设计了此功能,那么GPS数据的收集就有可能因司机人为操作或者其他网络等的影响,产生定位偏差或者获取定位失败的情况。现在我们服务端就有这么一个需求,要求分析出安装在司机手机中的APP是否定期收集到了GPS位置。

  为了保证GPS定位数据能够较为顺利的上传到服务器端,我们在APP每次请求完服务器端之后,只有当APP接收到来自服务器的正确回应,才能表示这次上传数据是正常且准确的,然后清空掉APP端上一次记录的GPS定位数据;但是如果APP因为各种原因无法将上一次收集的数据上报的服务器端,再尝试一番之后无果,将会在下一次与下一批收集到的数据一同上报,通过此机制来保证数据传递的稳定性。

  分析

  如果司机手机中的APP是定时15秒就收集到GPS地址的话,那么持久化到数据库中按获取时间顺序排列的前后两条记录的时间差应该就是15秒了,如果大于了15秒,那么就说明定时获取出现了问题。那么现在我们要做的,就是筛选出前后两条记录在获取GPS位置的时间差是否大于15秒,计算时间差的方法在Mysql中已经有了,那就是TimeDiff(对于TimeDiff在Java中使用的小坑我前面的博文有所总结,有兴趣的朋友可以Mark一下,后面抽时间看看。),而对于计算前后两条记录怎么计算差值,这好像确实没有接触过,那么本篇文章就来解决这个问题。

  解决

  首先博主在服务端有一个表来记录司机上报上来的GPS点位信息,表结构如下:

  1--司机GPS收集表

  2CREATETABLEcaptainad_driver_gps_position(

  3idBIGINTNOTNULLauto_incrementCOMMENT'主键',

  4business_idBIGINTDEFAULTNULLCOMMENT'业务ID',

  5device_MacVARCHAR(64)DEFAULTNULLCOMMENT'设备MAC地址',

  6device_imeiVARCHAR(64)DEFAULTNULLCOMMENT'设备IMEI',

  7lat_lngVARCHAR(64)DEFAULTNULLCOMMENT'纬经度',

  8capture_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPCOMMENT'捕获时间',

  9create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',

  10update_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'修改时间',

  11PRIMARYKEY(id),

  12KEY`idx_business_id`(`business_id`)USINGBTREE

  13)ENGINE=INNODBDEFAULTCHARSET=utf8COMMENT='司机GPS收集';

  表中记录的数据大致如下:

  现在就对按获取GPS位置的时间capture_time在按照时间排序之后,进行前后两条记录计算差值。为了计算两者的差值,那么我们肯定是需要获取到一前一后两条记录的,这里我们可以巧用一个变量来记录当前行的行数,然后随着循环查询每次将行数叠加,以达到行记录的目的,这样一来,我们就能知道哪两条记录是一前一后的了。

  打印行号的SQL语句:

  1SELECT

  2(@rownum:=@rownum+1)ASrownum,

  3tab.business_id,

  4tab.device_mac,

  5tab.capture_time

  6FROM

  7captainad_driver_gps_positiontab,

  8(SELECT@rownum:=0)r--声明变量

  9WHERE

  101=1

  11ANDDATE_FORMAT(

  12tab.capture_time,

  13'%Y-%m-%d'

  14)='2019-06-28'

  15ORDERBY

  16tab.capture_time

  基于此,我们将目标SQL给写出来,这里我根据我们的实际业务将语句稍微做了整理,脚本大致如下:

  1SELECT

  2t.business_id,

  3t.device_mac,

  4t.capture_time,

  5t.tdiff

  6FROM

  7(

  8SELECT

  9r1.business_id,

  10r1.device_mac,

  11r1.capture_time,

  12TIMEDIFF(

  13r2.capture_time,

  14r1.capture_time

  15)AS'tdiff'

  16FROM

  17(

  18SELECT

  19(@rownum:=@rownum+1)ASrownum,

  20tab.business_id,

  21tab.device_mac,

  22tab.capture_time

  23FROM

  24captainad_driver_gps_positiontab,

  25(SELECT@rownum:=0)r

  26WHERE

  271=1

  28ANDDATE_FORMAT(

  29tab.capture_time,

  30'%Y-%m-%d'

  31)='2019-06-28'

  32ORDERBY

  33tab.capture_time

  34)r1

  35LEFTJOIN(

  36SELECT

  37(@INDEX:=@INDEX+1)ASrownum,

  38tab.business_id,

  39tab.device_mac,

  40tab.capture_time

  41FROM

  42captainad_driver_gps_positiontab,

  43(SELECT@INDEX:=0)r

  44WHERE

  451=1

  46ANDDATE_FORMAT(

  47tab.capture_time,

  48'%Y-%m-%d'

  49)='2019-06-28'

  50ORDERBY

  51tab.capture_time

  52)r2ONr1.business_id=r2.business_id

  53ANDr1.device_mac=r2.device_mac

  54ANDr1.rownum=r2.rownum-1

  55)t

  56WHERE

  57t.tdiff>'00:00:15'

  在上面的代码中,我们通过r1.rownum=r2.rownum-1来判断两条记录是否是前后行,然后再使用TIMEDIFF函数来计算时间差,到此,我们的目标就实现了。

到此,相信大家对“MySQL怎么计算相邻两行某列差值”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL怎么计算相邻两行某列差值

本文链接: https://www.lsjlt.com/news/91090.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL怎么计算相邻两行某列差值
    本篇内容主要讲解“MySQL怎么计算相邻两行某列差值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL怎么计算相邻两行某列差值”吧!   背景   我...
    99+
    2022-10-19
  • MySQL计算相邻两行某列差值的方法
    这篇文章给大家分享的是有关MySQL计算相邻两行某列差值的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MySQL计算相邻两行某列差值的方法:首先通过【r1.rownum =...
    99+
    2022-10-18
  • 怎么在Mysql中计算相邻两行记录某列的差值
    本篇文章给大家分享的是有关怎么在Mysql中计算相邻两行记录某列的差值,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。表结构:数据:需求:按照c...
    99+
    2022-10-18
  • Java解决计算相邻两个数的最大差值的问题
    hello,今天给大家带来一道算法题。这道算法题,是我目前为止,见过最难的一道题。那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值。 ...
    99+
    2022-11-12
  • Java如何解决计算相邻两个数的最大差值的问题
    这篇文章主要介绍Java如何解决计算相邻两个数的最大差值的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值。 要求时间复杂度O(N), 且要求不能用非基于比...
    99+
    2023-06-25
  • php怎么计算两个日期相差几周
    这篇文章主要介绍“php怎么计算两个日期相差几周”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php怎么计算两个日期相差几周”文章能帮助大家解决问题。方法:1、将两个日期使用strtotime()函...
    99+
    2023-06-28
  • pandas怎么统计某一列或某一行的缺失值
    本篇内容主要讲解“pandas怎么统计某一列或某一行的缺失值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“pandas怎么统计某一列或某一行的缺失值”吧!统计某一列或某一行的缺失值数目1.使用i...
    99+
    2023-06-30
  • MSSQL中怎么计算两个日期相差的工作天数
    MSSQL中怎么计算两个日期相差的工作天数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码如下: if exists (s...
    99+
    2022-10-18
  • PHP怎么计算两个给定整数值的总和以及两个值相同时返回其总和的三倍
    这篇文章主要介绍“PHP怎么计算两个给定整数值的总和以及两个值相同时返回其总和的三倍”,在日常操作中,相信很多人在PHP怎么计算两个给定整数值的总和以及两个值相同时返回其总和的三倍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作