mysql 监控开始时间,结束时间,平均取n个时间点

需求

最近1小时 1分钟 60个点

最近3小时 5分钟 36个点

最近6小时 10分钟 36个点

最近12小时 20分钟 36个点

最近1天 1小时 24个点

最近3天 3小时 24个点

最近1周 6小时 28个点

如果你的递归查询支持递归CTE(如MySQL 8.0+),可以使用递归查询来生成平均分布的时间点。下面是一个示例,假设开始时间为 start_time,结束时间为 end_time,要取n个时间点:

sql 复制代码
WITH RECURSIVE TimePoints AS (
    SELECT TIMESTAMPADD(SECOND, 0, start_time) AS time_point, 1 AS point_number
    UNION ALL
    SELECT TIMESTAMPADD(SECOND, (UNIX_TIMESTAMP(end_time) - UNIX_TIMESTAMP(start_time)) / (n - 1) * point_number, start_time), point_number + 1
    FROM TimePoints
    WHERE point_number < n
)
SELECT time_point
FROM TimePoints;

解释:

WITH RECURSIVE TimePoints AS: 这部分定义了一个递归CTE,用于生成时间点序列。

SELECT TIMESTAMPADD(SECOND, 0, start_time) AS time_point, 1 AS point_number: 这是递归的起始部分,设置第一个时间点和计数器。

SELECT TIMESTAMPADD(SECOND, (UNIX_TIMESTAMP(end_time) - UNIX_TIMESTAMP(start_time)) / (n - 1) * point_number, start_time), point_number + 1: 这是递归部分,通过计算时间段的秒数差除以(n-1)来计算每个时间点的间隔。

WHERE point_number < n: 这个条件确保递归停止在生成n个时间点之后。

最后的 SELECT time_point FROM TimePoints: 返回生成的时间点序列。

例子:

sql 复制代码
WITH RECURSIVE TimePoints AS (
    SELECT TIMESTAMPADD(SECOND, 0, '2024-08-08 18:30:00') AS time_point, 1 AS point_number
    UNION ALL
    SELECT TIMESTAMPADD(SECOND, (UNIX_TIMESTAMP('2024-08-08 21:30:00') - UNIX_TIMESTAMP('2024-08-08 18:30:00')) / (6 - 1) * point_number, '2024-08-08 18:30:00'), point_number + 1
    FROM TimePoints
    WHERE point_number < 6
)
SELECT time_point,(SELECT name
FROM op_custom_config_tb
ORDER BY ABS(TIMESTAMPDIFF(SECOND, update_time, time_point))
LIMIT 1) aaa
FROM TimePoints;
相关推荐
程序员岳焱6 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
计算机毕设定制辅导-无忧学长6 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
程序员柳7 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、7 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机7 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10247 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
Johny_Zhao8 小时前
Ubuntu系统安装部署Pandawiki智能知识库
linux·mysql·网络安全·信息安全·云计算·shell·yum源·系统运维·itsm·pandawiki
祁思妙想8 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人9 小时前
1.MySQL之如何定位慢查询
数据库·mysql
秦歌6669 小时前
向量数据库-Milvus快速入门
数据库·milvus