MySql如何获取相邻数据

作者:Rude_M 时间:2024-01-16 04:36:53 

如何获取相邻数据

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

我只找到了以下的...

/*获取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是递增的,但也会存在清零的情况。我们的需求是计算当天的分钟递增量。

MySql如何获取相邻数据

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;

解析

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

MySql如何获取相邻数据

最终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如何获取相邻数据

来源:https://blog.csdn.net/Rude_M/article/details/81133681

标签:MySql,相邻,数据
0
投稿

猜你喜欢

  • CSS Frameworks的概念

    2008-01-23 18:41:00
  • Python输出各行命令详解

    2021-12-03 05:29:18
  • 利用pandas向一个csv文件追加写入数据的实现示例

    2022-04-09 14:51:56
  • 详解python 爬取12306验证码

    2022-07-17 20:38:20
  • PHP+Mysql基于事务处理实现转账功能的方法

    2023-10-21 16:53:06
  • pycharm安装和首次使用教程

    2022-05-23 19:01:36
  • tensorflow 1.0用CNN进行图像分类

    2022-08-17 17:32:29
  • electron-builder打包配置详解

    2024-04-17 10:24:54
  • torch.optim优化算法理解之optim.Adam()解读

    2023-06-24 23:30:25
  • 树莓派4B安装Tensorflow的方法步骤

    2023-09-05 17:28:06
  • Linux(Ubuntu)下mysql5.7.17安装配置方法图文教程

    2024-01-25 21:28:32
  • JavaScript实现三种常用网页特效(offset、client、scroll系列)

    2023-08-27 11:54:30
  • mysql 一次向表中插入多条数据实例讲解

    2024-01-14 06:34:48
  • vue基于mint-ui实现城市选择三级联动

    2024-06-05 09:17:45
  • oracle SQL解析步骤小结

    2009-09-30 10:46:00
  • 深入string理解Golang是怎样实现的

    2024-02-07 06:45:24
  • python+opencv实现霍夫变换检测直线

    2021-07-30 04:08:57
  • Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】

    2022-01-08 13:53:58
  • python的图形用户界面介绍

    2023-04-08 19:55:46
  • python中对信号的处理详解

    2021-05-29 08:37:41
  • asp之家 网络编程 m.aspxhome.com