【mysql】统计两个相邻任务/事件的间隔时间以及每个任务的平均用时

news/2024/10/15 15:44:41/

  • 准备
  • 步骤
    • 1. 设置查询参数部分
      • 1.1 设置需要分析的起始时间
      • 1.2. 设置需要分析的时间的长度(分析的结束时间)
      • 1.3. 设置分析内容
      • 1.4. 设置需要分析的表和字段
    • 2. 自动计算分析
      • 2.1 设置起始序号
      • 2.2. 筛选`user_log`表数据并生成带序号的临时表`temp_ria`
      • 2.3. 通过临时表`temp_ria` 生成序号减一的临时表`temp_rib`
      • 2.4. 关联通过序号 `temp_ria` 与 `temp_rib`,并计算出需要分析的时间`create_time`的时间差。
      • 2.5. 查询分析结果
      • 2.6. 统计平均用时
      • 2.7. 删除临时表
  • 完成查询语句

准备

  • 数据:任务/事件日志。
  • 查询工具:Navicat

步骤

1. 设置查询参数部分

1.1 设置需要分析的起始时间

SET @st = '2024-10-13 11:00:00';

1.2. 设置需要分析的时间的长度(分析的结束时间)

分析30分钟的数据

SET @et = DATE_ADD(@st,INTERVAL 30 MINUTE);

分析30秒的数据

SET @et = DATE_ADD(@st,INTERVAL 30 SECOND);

分析12小时的数据

SET @et = DATE_ADD(@st,INTERVAL 12 HOUR);

1.3. 设置分析内容

SET @eventname = '微信支付';

1.4. 设置需要分析的表和字段

  1. user_log 数据表转化为后续自动分析使用的临时表 temp_table_time
  2. create_time 需要分析的时间字段转化为后续自动分析使用的临时字段 temp_time
DROP TABLE IF EXISTS temp_table_time;
CREATE TABLE IF NOT EXISTS temp_table_time
SELECT *,create_time AS `temp_time` FROM user_log 
WHERE create_time BETWEEN @st and @et AND event_name =@eventname ;

2. 自动计算分析

2.1 设置起始序号

SET @row_index = 0;

2.2. 筛选user_log表数据并生成带序号的临时表temp_ria

DROP TABLE IF EXISTS temp_ria;
CREATE TABLE IF NOT EXISTS temp_ria
SELECT (@row_index:=@row_index + 1) AS ria,t.* 
FROM (SELECT * FROM temp_table_time) AS t

2.3. 通过临时表temp_ria 生成序号减一的临时表temp_rib

DROP TABLE IF EXISTS temp_rib;
CREATE TABLE IF NOT EXISTS temp_rib
SELECT ria-1 AS rib,temp_ria.* FROM temp_ria;

2.4. 关联通过序号 temp_riatemp_rib,并计算出需要分析的时间create_time的时间差。

使用 TIMESTAMPDIFF 函数计算两个时间的时间差,并使用 SEC_TO_TIME 函数将计算结果转换为时:分:秒的格式

DROP TABLE IF EXISTS temp_diff;
CREATE TABLE IF NOT EXISTS temp_diff
SELECT 
a.ria,
a.create_time as create_time_a,
b.create_time as create_time_b,
TIMESTAMPDIFF(SECOND, a.create_time,b.create_time) as diff,
SEC_TO_TIME(TIMESTAMPDIFF(SECOND, a.create_time,b.create_time)) as difftimeFROM temp_ria AS a
LEFT JOIN temp_rib as b ON a.ria = b.rib WHERE b.rib is not NULL;

2.5. 查询分析结果

SELECT * FROM temp_diff ORDER BY diff DESC;

在这里插入图片描述

2.6. 统计平均用时

使用 AVG 函数计算平均时间差,并使用 SEC_TO_TIME 函数将计算结果转换为时:分:秒的格式

SELECT SEC_TO_TIME(AVG(diff)) FROM temp_diff;

在这里插入图片描述

2.7. 删除临时表

DROP TABLE IF EXISTS temp_diff;
DROP TABLE IF EXISTS temp_rib;
DROP TABLE IF EXISTS temp_ria;
DROP TABLE IF EXISTS temp_table_time;

完成查询语句

# 1. 设置查询参数部分
SET @st = '2024-10-13 11:00:00';
SET @et = DATE_ADD(@st,INTERVAL 30 MINUTE);
SET @eventname = '微信支付';-- 生成临时表 temp_table_time
DROP TABLE IF EXISTS temp_table_time;
CREATE TABLE IF NOT EXISTS temp_table_time
SELECT *,create_time AS `temp_time` FROM user_log 
WHERE create_time BETWEEN @st and @et AND event_name =@eventname ;# 2.自动计算部分
SET @row_index = 0;
-- 生成临时表temp_ria
DROP TABLE IF EXISTS temp_ria;
CREATE TABLE IF NOT EXISTS temp_ria
SELECT (@row_index:=@row_index + 1) AS ria,t.* 
FROM (SELECT * FROM temp_table_time) AS t;-- 生成临时表 temp_rib
DROP TABLE IF EXISTS temp_rib;
CREATE TABLE IF NOT EXISTS temp_rib
SELECT ria-1 AS rib,temp_ria.* FROM temp_ria;-- 生成分析结果 temp_diff
DROP TABLE IF EXISTS temp_diff;
CREATE TABLE IF NOT EXISTS temp_diff
SELECT 
a.ria,
a.temp_time as temp_time_a,
b.temp_time as temp_time_b,
TIMESTAMPDIFF(SECOND, a.temp_time,b.temp_time) as diff,
SEC_TO_TIME(TIMESTAMPDIFF(SECOND, a.temp_time,b.temp_time)) as difftimeFROM temp_ria AS a
LEFT JOIN temp_rib as b ON a.ria = b.rib WHERE b.rib is not NULL;-- 查询分析结果
SELECT * FROM temp_diff ORDER BY diff DESC;SELECT SEC_TO_TIME(AVG(diff)) FROM temp_diff;DROP TABLE IF EXISTS temp_diff;
DROP TABLE IF EXISTS temp_rib;
DROP TABLE IF EXISTS temp_ria;
DROP TABLE IF EXISTS temp_table_time;

http://www.ppmy.cn/news/1539484.html

相关文章

Elasticsearch Suggester

概述 Elasticsearch里设计了4 种类别的 Suggester Term Suggester:词条建议器。对给输入的文本进进行分词,为每个分词提供词项建议。Phrase Suggester:短语建议器,在term的基础上,会考量多个term之间的关系Completio…

什么是DApp?DApp开发指南

一、什么是DApp? DApp(Decentralized Application),即去中心化应用,是一种基于区块链技术开发的应用程序,与传统的中心化应用不同,DApp不依赖单一服务器或管理主体,而是利用去中心化…

【大数据】Hive快速入门

文章目录 概述一、Hive的基本概念二、Hive的架构与组件三、Hive的特点与优势四、Hive的应用场景五、Hive的官方网站与资源 驱动说明(Driver)一、主要功能二、与其他组件的交互三、工作流程四、重要性 元数据模型(Metastore)一、Hive元数据模型的基本概念…

C语言笔记 12

逻辑类型 bool&#xff1a;在“#include <stdbool.h>”之后就可以使用bool和true、false 并没有真正的bool量的类型 逻辑运算 逻辑运算是对逻辑量进行的运算&#xff0c;结果只有0或1逻辑量是关系运算或逻辑运算的结果 运算符描述示例结果!逻辑非!a如果a是true结果就是…

RU 19.24 Standalone(GI和DB分开打)

参考文档&#xff1a;Oracle Database Patch 36582629 - GI Release Update 19.24.0.0.240716 2.1.1.1 OPatch Utility Information 12.2.0.1.42 or later 2.1.1.2 Validation of Oracle Inventory 分别在GI和Oracle Home下执行 $ <ORACLE_HOME>/OPatch/opatch lsinven…

基于Springboot+Vue的电缆行业生产管理系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 管理员…

服务端技术架构演进之路

服务端技术架构演进之路 目录 服务端技术架构演进之路 0.架构中常见概念及理解 1.单机架构 2.应用数据分离架构 3.应用服务器集群架构 4.读写分离/主从分离架构 5.冷热分离架构 6.垂直分库架构 7.微服务架构 8.容器编排架构 本文以一个 " 电子商务 " 应…

什么是单例模式?单例模式的作用?单例模式的使用场景等...

设计模式&#xff08;一&#xff09;单例模式详解 一、单例模式 什么是单例模式&#xff1f; 单例模式是一种设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。在Java中&#xff0c;单例模式通过以下几种方式实现&#xff1a;…