MySQL计算相邻两行某列差值的方法
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章给大家分享的是有关MySQL计算相邻两行某列差值的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MySQL计算相邻两行某列差值的方法:首先通过【r1.rownu
千家信息网最后更新 2025年01月20日MySQL计算相邻两行某列差值的方法
这篇文章给大家分享的是有关MySQL计算相邻两行某列差值的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
MySQL计算相邻两行某列差值的方法:首先通过【r1.rownum = r2.rownum - 1】来判断两条记录是否是前后行;然后再使用TIMEDIFF函数来计算时间差即可。
MySQL计算相邻两行某列差值的方法:
首先博主在服务端有一个表来记录司机上报上来的GPS点位信息,表结构如下:
-- 司机GPS收集表CREATE TABLE captainad_driver_gps_position ( id BIGINT NOT NULL auto_increment COMMENT '主键', business_id BIGINT DEFAULT NULL COMMENT '业务ID', device_mac VARCHAR (64) DEFAULT NULL COMMENT '设备MAC地址', device_imei VARCHAR (64) DEFAULT NULL COMMENT '设备IMEI', lat_lng VARCHAR (64) DEFAULT NULL COMMENT '纬经度', capture_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '捕获时间', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (id), KEY `idx_business_id` (`business_id`) USING BTREE) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '司机GPS收集';
表中记录的数据大致如下:
现在就对按获取GPS位置的时间capture_time在按照时间排序之后,进行前后两条记录计算差值。为了计算两者的差值,那么我们肯定是需要获取到一前一后两条记录的,这里我们可以巧用一个变量来记录当前行的行数,然后随着循环查询每次将行数叠加,以达到行记录的目的,这样一来,我们就能知道哪两条记录是一前一后的了。
打印行号的SQL语句:
SELECT (@rownum := @rownum + 1) AS rownum, tab.business_id, tab.device_mac, tab.capture_timeFROM captainad_driver_gps_position tab, (SELECT @rownum := 0) r -- 声明变量WHERE 1 = 1AND DATE_FORMAT( tab.capture_time, '%Y-%m-%d') = '2019-06-28'ORDER BY tab.capture_time
基于此,我们将目标SQL给写出来,这里我根据我们的实际业务将语句稍微做了整理,脚本大致如下:
SELECT t.business_id, t.device_mac, t.capture_time, t.tdiffFROM ( SELECT r1.business_id, r1.device_mac, r1.capture_time, TIMEDIFF( r2.capture_time, r1.capture_time ) AS 'tdiff' FROM ( SELECT (@rownum := @rownum + 1) AS rownum, tab.business_id, tab.device_mac, tab.capture_time FROM captainad_driver_gps_position tab, (SELECT @rownum := 0) r WHERE 1 = 1 AND DATE_FORMAT( tab.capture_time, '%Y-%m-%d' ) = '2019-06-28' ORDER BY tab.capture_time ) r1 LEFT JOIN ( SELECT (@INDEX := @INDEX + 1) AS rownum, tab.business_id, tab.device_mac, tab.capture_time FROM captainad_driver_gps_position tab, (SELECT @INDEX := 0) r WHERE 1 = 1 AND DATE_FORMAT( tab.capture_time, '%Y-%m-%d' ) = '2019-06-28' ORDER BY tab.capture_time ) r2 ON r1.business_id = r2.business_id AND r1.device_mac = r2.device_mac AND r1.rownum = r2.rownum - 1 ) tWHERE t.tdiff > '00:00:15'
在上面的代码中,我们通过r1.rownum = r2.rownum - 1
来判断两条记录是否是前后行,然后再使用TIMEDIFF
函数来计算时间差,到此,我们的目标就实现了。
感谢各位的阅读!关于MySQL计算相邻两行某列差值的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
时间
差值
方法
司机
业务
内容
函数
变量
时间差
更多
目标
设备
语句
不错
实用
这样一来
一来
代码
位置
信息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
全国提案数据库
九恒星团队的软件开发流程
镇江软件开发招人
mc国际服为什么进不了服务器
省市区三级联动数据库js
软件开发面临风险
数据库中消费记录格式
我爱游戏网络技术有限公司
网络安全记录检查表
网络安全应构建生态化防御
从哪里看数据库用户名和密码
开源分布式数据库培训
数据库碎片手工提取
网络技术源代码定义
memcache数据库
永恒之塔单机数据库连接
停车场如何保障网络安全
游戏网络服务器
数据库未启动备份
linux 数据库导出
机关网络安全工作会议上发言
最好管理服务器
网络安全法遵循积极利用
生鲜电商软件开发价钱
大专计算机网络技术毕业
作为软件开发人员的职业素养
社区网络安全工作责任制实施细则
静安区个人数据库服务商行业
停车场如何保障网络安全
小程序直播平台搭建服务器