千家信息网

MySQL计算相邻两行某列差值的方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关MySQL计算相邻两行某列差值的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MySQL计算相邻两行某列差值的方法:首先通过【r1.rownu
千家信息网最后更新 2026年10月31日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安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 互联网科技活动banner 智能科技公司是互联网公司吗 互联网科技金融公司 智网互联网科技 润盈互联网科技 大白互联网科技 四川狮子座互联网科技 深圳卡尔迅互联网科技有限公司怎么样 港股科技和互联网 互联网科技革命什么开始 玉溪互联网科技怎么选 每天都有哪些好的互联网科技 黑云互联网科技有限公司 宇信科技在杭州互联网排第几 济南小医互联网科技有限公司招聘 唯美互联网科技 科技和互联网行业的特点 互联网科技和医药行业 互联网科技大佬云集 互联网科技工作委员会毛军 互联网金融科技创新 华中科技有哪些互联网大佬 湖南一路畅行互联网科技 移动互联网科技公司 消费医药和互联网科技 河南住房之家互联网科技 翼展科技 首家互联网医院 长沙茂晟互联网科技有限公司 国大互联网教育科技有限公司薪资
0