MySQL同表相邻数据比对查询

需求

我们将会比对相邻的数据,其中value是递增的,但也会存在清零的情况。我们的需求是计算当天的分钟递增量。
在这里插入图片描述

SQL

语句中需要解释一下参数

  • ** ctc_etl.1_1_1907/sum.out_2021 :表名**
  • ** WHERE
    item_timestamp > “2021-12-01 00:00:00”
    AND item_timestamp < “2021-12-02 00:00:00” 是我自己加的筛选条件**
SELECT b.id,( b.item_value - a.item_value ) AS value,
	b.item_timestamp AS time 
FROM
	(
	SELECT id,item_value,
		@num := @num + 1 AS row_number 
	FROM
		( SELECT @num := 0 ) r,
			ctc_etl.`1_1_1907/sum.out_2021` 
	WHERE
		item_timestamp > "2021-12-01 00:00:00" 
		AND item_timestamp < "2021-12-02 00:00:00" 
	ORDER BY
		id 
	) a,
	(
	SELECT
		id,
		item_value,
		item_timestamp,
		@num2 := @num2 + 1 AS row_number 
	FROM
		( SELECT @num2 := 0 ) r2,
			ctc_etl.`1_1_1907/sum.out_2021` 
	WHERE
		item_timestamp > "2021-12-01 00:00:00" 
		AND item_timestamp < "2021-12-02 00:00:00" 
	ORDER BY
		id 
	) b 
WHERE
	a.row_number + 1 = b.row_number;

解析

目前计算的只是每秒的增加量,其次就是存在负数的情况,也就是清零了后一个数比前一个小就造成了负数
在这里插入图片描述

最终SQL

SELECT
	c.id,
	SUM( c.VALUE ) AS value,
	DATE_FORMAT( c.time, "%Y-%m-%d %H:%i:00" ) AS time 
FROM
	(
	SELECT
		b.id,
		(b.item_value - a.item_value ) AS value,
		b.item_timestamp AS time 
	FROM
		(
		SELECT
			id,
			item_value,
			@num := @num + 1 AS row_number 
		FROM
			( SELECT @num := 0 ) r,
			ctc_etl.`1_1_1907/sum.out_2021` 
		WHERE
			item_timestamp > "2021-12-01 00:00:00" 
			AND item_timestamp < "2021-12-02 00:00:00" 
		ORDER BY
			id 
		) a,
		(
		SELECT
			id,
			item_value,
			item_timestamp,
			@num2 := @num2 + 1 AS row_number 
		FROM
			( SELECT @num2 := 0 ) r2,
			ctc_etl.`1_1_1907/sum.out_2021` 
		WHERE
			item_timestamp > "2021-12-01 00:00:00" 
		AND item_timestamp < "2021-12-02 00:00:00" ORDER BY id ) b WHERE a.row_number + 1 = b.row_number ) c WHERE c.VALUE > 0 
GROUP BY
	DATE_FORMAT(
	c.time,
	"%Y-%m-%d %H:%i:00")

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

临水而愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值