MySQL 根據日期分段統計處理


 

需求:

根據component_invoke_time每隔15分鍾統計一次調用的數量

 

表結構和表數據:

 

 

 

創建表結構:

DROP TABLE IF EXISTS `src_ai_component_operator`;
CREATE TABLE `src_ai_component_operator` (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `application_id` int(50) NOT NULL COMMENT '應用ID',
  `component_id` int(50) NOT NULL COMMENT '組件編號',
  `component_name` varchar(256) NOT NULL COMMENT '組件名稱',
  `invoke_system_name` varchar(256) DEFAULT NULL COMMENT '被調用單位/應用',
  `component_invoke_time` datetime DEFAULT NULL COMMENT '調用/訪問時間,yyyy-MM-dd HH:mm:ss',
  `component_invoke_count` int(10) DEFAULT NULL COMMENT '調用次數',
  `compare_db` int(10) DEFAULT NULL COMMENT '訪問的數量',
  `component_invoke_day_time` datetime DEFAULT NULL COMMENT '調用時間,yyyy-MM-dd',
  `statistics_datetime` datetime DEFAULT NULL COMMENT '統計時間,yyyy-MM-dd HH:mm:ss',
  `statistics_datetime_min` datetime DEFAULT NULL COMMENT '統計時間(15分鍾),yyyy-MM-dd HH:mm:ss',
  `created_by` varchar(32) DEFAULT NULL COMMENT '創建人',
  `created_time` datetime DEFAULT NULL COMMENT '創建時間',
  `updated_by` varchar(32) DEFAULT NULL COMMENT '更新人',
  `updated_time` datetime DEFAULT NULL COMMENT '更新時間',
  PRIMARY KEY (`id`),
  KEY `index_component_name` (`component_name`),
  KEY `index_invoke_system_name` (`invoke_system_name`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='組件調用信息表';

SET FOREIGN_KEY_CHECKS = 1;

 

創建表數據:

BEGIN;
INSERT INTO `src_ai_component_operator` VALUES (1, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-12 08:32:48', 1, 1, '2020-09-17 11:32:55', '2020-09-17 11:33:03', '2020-09-17 11:15:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (2, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-13 11:32:48', 1, 1, '2020-08-05 11:32:55', '2020-08-05 11:33:03', '2020-08-05 11:15:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (3, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-12 10:32:48', 1, 1, '2020-09-12 11:32:55', '2020-09-12 11:33:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (4, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-12 11:37:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (5, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-12 09:20:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (6, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-12 08:20:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (7, 12345, 2344, '上傳圖片', 'aaaaa', '2020-08-12 08:20:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (8, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 09:20:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (9, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 08:20:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (10, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 09:10:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (11, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 08:32:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (12, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 08:17:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (13, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 08:09:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
INSERT INTO `src_ai_component_operator` VALUES (14, 12345, 2344, '上傳圖片', 'aaaaa', '2020-09-25 08:52:48', 1, 1, '2020-09-12 11:37:55', '2020-09-12 11:37:03', '2020-09-12 14:30:00', NULL, NULL, NULL, NULL);
COMMIT;

  

錯誤的示范:

格式化時間錯誤的時間出現的錯誤:

### 格式化后為NULL
SELECT DATE_FORMAT("2020-09-25 08:60", "%Y-%m-%d");

  

處理結果

 

 

 

首先把日期時間處理正確:

### 查詢時間處理,把component_invoke_time按照15分間隔的時間進行處理,其中15分鍾可以看作N分鍾,這里處理相對應的N即可,例如每隔10分鍾統計一次
### 例如 :
### 2020-09-25 08:07 為 2020-09-25 08:15
### 2020-09-25 08:14 為 2020-09-25 08:15
### 2020-09-25 08:22 為 2020-09-25 08:30
### 2020-09-25 08:50 為 2020-09-25 09:00
SELECT 
	DATE_FORMAT(
		concat(
			date( t.component_invoke_time ), 
			" ", 
			CASE WHEN (floor( MINUTE ( t.component_invoke_time ) / 15 ) * 15 + 15) = 60 THEN HOUR ( t.component_invoke_time) + 1 ELSE HOUR ( t.component_invoke_time) END, 
			":", 
			CASE WHEN (floor( MINUTE ( t.component_invoke_time ) / 15 ) * 15 + 15) = 60 THEN "00" ELSE (floor( MINUTE ( t.component_invoke_time ) / 15 ) * 15 + 15) END
		), 
	"%Y-%m-%d %H:%i") 
FROM src_ai_component_operator AS t;

  

處理后結果

 

 

比對查看處理的日期格式是否正確:

### 處理15分鍾相加后60進1的情況
SELECT 
	t.component_invoke_time AS datetime, 
	date( t.component_invoke_time ) AS date, 
	CASE WHEN (floor( MINUTE ( t.component_invoke_time ) / 15 ) * 15 + 15) = 60 THEN HOUR ( t.component_invoke_time) + 1 ELSE HOUR ( t.component_invoke_time) END AS hours , 
	CASE WHEN (floor( MINUTE ( t.component_invoke_time ) / 15 ) * 15 + 15) = 60 THEN "00" ELSE (floor( MINUTE ( t.component_invoke_time ) / 15 ) * 15 + 15) END AS mins 
FROM src_ai_component_operator AS t;

  

處理結果

 

 

最終處理想要的結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM