背景
有时会有这样一种查询场景,需要对查询结果前后行操作,比如后一行减前一行。
比如有一张用户登录表,有登入和登出两行,需要相减简单计算在线时长。或者一张订单表,需要计算后一行的订单id和前一行的订单id差多少(假设订单号是单调递增的)。
针对这类场景,SQL语句改如何写呢?
表结构和数据构造
以统计前后行的订单号是否连续为例,
表结构:
CREATE TABLE `t_test3` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`order_id` int(11) DEFAULT '0' COMMENT '订单号',
PRIMARY KEY (`id`),
key (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='';
插入测试数据:
insert into t_test3(
order_id
) values(1),(2),(3),(5),(6),(4),(2);
第一种写法:select 子查询
找order_id-1行,如果没有,说明不存在order_id-1的order_id
mysql>select *, (select t1.order_id-order_id from t_test3 w