MySql如何获取相邻数据

 更新时间:2022年05月07日 12:05:22   作者:Rude_M  
这篇文章主要介绍了MySql如何获取相邻数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

如何获取相邻数据

因为项目,所以找到了一些资料并且总结了下关于获取相邻数据的方式。

我只找到了以下的...

/*获取id值与5相减绝对值最近的数据,如果有绝对值相同的,相邻的数据优先输出*/
/*ABS(X)其实就是获取绝对值,然后的话order by 后面的1代表着根据select关键字
后的第一个字段进行排序。limit 后面的数字代表着你想查询数据的行数*/
SELECT ABS(cid-5),cname FROM company ORDER BY 1 LIMIT 3
/*获取指定id的上一条记录,我这里是以id=5为例的*/
select cid,cname from company order by cid>=5,cid desc limit 1
/*获取指定id的下一条记录,我这里是以id=5为例的*/
SELECT cid,cname from company order by cid<=5,cid asc limit 1

记录一下,以免以后遇到又不会

同表相邻数据比对查询

需求

我们将会比对相邻的数据,其中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")

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL创建内部临时表的所有场景盘点

    MySQL创建内部临时表的所有场景盘点

    这篇文章主要为大家介绍了MySQL创建内部临时表的所有场景盘点,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • CentOS 安装redis和MySQL

    CentOS 安装redis和MySQL

    这篇文章主要介绍了CentOS 安装redis和MySQL的相关资料,需要的朋友可以参考下
    2019-08-08
  • MySQL 人脸向量欧几里得距离相似查询步骤梳理

    MySQL 人脸向量欧几里得距离相似查询步骤梳理

    这篇文章主要为大家介绍了MySQL 人脸向量欧几里得距离相似查询步骤梳理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Windows环境下的MYSQL5.7配置文件定位图文分析

    Windows环境下的MYSQL5.7配置文件定位图文分析

    本文通过图文并茂的形式给大家介绍了Windows环境下的MYSQL5.7配置文件定位 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • MySQL中索引的优化的示例详解

    MySQL中索引的优化的示例详解

    索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。本文主要来讲讲索引优化的方法,希望对大家有所帮助
    2023-02-02
  • MySQL每晚定时弹出一个taskeng.exe的解决方法

    MySQL每晚定时弹出一个taskeng.exe的解决方法

    这篇文章主要介绍了MySQL每晚定时弹出一个taskeng.exe的解决方法,需要的朋友可以参考下
    2018-07-07
  • MySQL在生产环境出现无法启动的问题解决

    MySQL在生产环境出现无法启动的问题解决

    在当今的数据驱动世界中,MySQL作为广泛应用的关系型数据库管理系统,在众多生产环境中承担着至关重要的角色,然而,面对复杂多变的业务场景,MySQL可能会遭遇各类故障和性能瓶颈,本文将深入探讨MySQL在生产环境出现无法启动的问题解决,需要的朋友可以参考下
    2024-10-10
  • MySQL权限控制和用户与角色管理实例分析讲解

    MySQL权限控制和用户与角色管理实例分析讲解

    用户经认证后成功登录数据库,之后服务器将通过系统权限表检测用户发出的每个请求操作,判断用户是否有足够的权限来实施该操作,这就是MySQL的权限控制过程
    2022-12-12
  • MySql安装启动两种方法教程详解

    MySql安装启动两种方法教程详解

    本文通过两种方法给大家介绍mysql安装启动的方法,非常不错,具有参考价值,有需要的朋友一起学习吧
    2016-05-05
  • MySQL索引详解及演进过程及面试题延伸

    MySQL索引详解及演进过程及面试题延伸

    这篇文章主要介绍了MySQL索引详解及演进过程以及延申出面试题,索引在关系型数据库中,是一种单独的、物理的对数据库表中的一列或者多列值进行排序的一种存储结构
    2022-07-07

最新评论