34,576
社区成员
发帖
与我相关
我的任务
分享
DELIMITER //
drop procedure if exists selectCount;//
CREATE PROCEDURE selectCount(p VARCHAR(20),n DATETIME,o DATETIME )
BEGIN
DECLARE a INT ;
DECLARE b DATETIME;
SET a =0;
SET a = (SELECT TIMESTAMPDIFF(MINUTE,n,o));
IF a <= 3*60 THEN
INSERT INTO tb1 (s1, s2)
SELECT COUNT(a.DATE),(n + INTERVAL b.help_topic_id*3 MINUTE)
FROM history_detail as a RIGHT JOIN mysql.help_topic as b
ON a.DATE BETWEEN n+INTERVAL (b.help_topic_id-1)*3 MINUTE AND n + INTERVAL b.help_topic_id*3 MINUTE AND a.result='合格' AND a.pr_name=p
where b.help_topic_id>=1 AND n+INTERVAL (b.help_topic_id-1)*3 MINUTE < o
group by b.help_topic_id;
ELSEIF a>3*60 AND a <= 72*60 THEN
INSERT INTO tb1 (s1, s2)
SELECT COUNT(a.DATE),(n + INTERVAL b.help_topic_id HOUR)
FROM history_detail as a RIGHT JOIN mysql.help_topic as b
ON a.DATE BETWEEN n+INTERVAL (b.help_topic_id-1) HOUR AND n + INTERVAL b.help_topic_id HOUR AND a.result='合格' AND a.pr_name=p
where b.help_topic_id>=1 AND n+INTERVAL (b.help_topic_id-1) HOUR < o
group by b.help_topic_id;
ELSEIF a>72*60 AND a <= 30*24*60 THEN
INSERT INTO tb1 (s1, s2)
SELECT COUNT(a.DATE),(n + INTERVAL b.help_topic_id DAY)
FROM history_detail as a RIGHT JOIN mysql.help_topic as b
ON a.DATE BETWEEN n+INTERVAL (b.help_topic_id-1) DAY AND n + INTERVAL b.help_topic_id DAY AND a.result='合格' AND a.pr_name=p
where b.help_topic_id>=1 AND n+INTERVAL (b.help_topic_id-1) DAY < o
group by b.help_topic_id;
ELSEIF a>30*24*60 AND a <= 365*24*60 THEN
INSERT INTO tb1 (s1, s2)
SELECT COUNT(a.DATE),(n + INTERVAL b.help_topic_id MONTH)
FROM history_detail as a
RIGHT JOIN mysql.help_topic as b
ON a.DATE BETWEEN n+INTERVAL (b.help_topic_id-1) MONTH AND n + INTERVAL b.help_topic_id MONTH AND a.result='合格' AND a.pr_name=p
where b.help_topic_id>=1 AND n+INTERVAL (b.help_topic_id-1) MONTH < o
group by b.help_topic_id;
ELSEIF a>365*24*60 THEN
INSERT INTO tb1 (s1, s2)
SELECT COUNT(a.DATE),(n + INTERVAL b.help_topic_id YEAR)
FROM history_detail as a
RIGHT JOIN mysql.help_topic as b
ON a.DATE BETWEEN n+INTERVAL (b.help_topic_id-1) YEAR AND n + INTERVAL b.help_topic_id YEAR AND a.result='合格' AND a.pr_name=p
where b.help_topic_id>=1 AND n+INTERVAL (b.help_topic_id-1) YEAR < o
group by b.help_topic_id;
END IF;
SELECT * FROM tb1;
TRUNCATE TABLE tb1;
END;
//
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_atest1`$$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_atest1`(
IN p_begin_time VARCHAR(200),
IN p_end_time VARCHAR(200)
)
BEGIN
-- 3个小时以内,获取每3分钟数据量,
-- 3小时~72小时 获取每1个小时数据量,
-- 72小时~30天 获取每天数据量,
-- 30天~365天 获取每月数据量,
-- 大于365天 获取每年数据量
DECLARE p_time_diff_sec INT;
DECLARE p_type VARCHAR(20);
SET p_time_diff_sec=TIME_TO_SEC(TIMEDIFF(p_end_time,p_begin_time));
IF(p_time_diff_sec>=0 AND p_time_diff_sec<=3*60*60) THEN
SET p_type='3min';
END IF;
IF(p_time_diff_sec>3*60*60 AND p_time_diff_sec<=72*60*60) THEN
SET p_type='1hour';
END IF;
IF(p_time_diff_sec>72*60*60 AND p_time_diff_sec<=30*24*60*60) THEN
SET p_type='1day';
END IF;
IF(p_time_diff_sec>30*24*60*60 AND p_time_diff_sec<=365*24*60*60) THEN
SET p_type='1month';
END IF;
IF(DATEDIFF(p_end_time,p_begin_time)>365) THEN
SET p_type='1year';
END IF;
-- SELECT p_time_diff_sec,p_type;
IF p_type='3min' THEN
SELECT b.begin_time,COUNT(a.id) AS cnt
FROM history_detail a
RIGHT JOIN
(
SELECT DATE_ADD(p_begin_time,INTERVAL 3*help_topic_id MINUTE) AS begin_time,DATE_ADD(p_begin_time,INTERVAL 3*(help_topic_id+1) MINUTE) AS end_time
FROM mysql.help_topic
WHERE DATE_ADD(p_begin_time,INTERVAL 3*(help_topic_id+1) MINUTE)<=p_end_time
)b ON a.date>=b.begin_time AND a.date<=b.end_time
GROUP BY b.begin_time;
ELSEIF p_type='1hour' THEN
SELECT b.begin_time,COUNT(a.id) AS cnt
FROM history_detail a
RIGHT JOIN
(
SELECT DATE_ADD(p_begin_time,INTERVAL 1*help_topic_id HOUR) AS begin_time,DATE_ADD(p_begin_time,INTERVAL 1*(help_topic_id+1) HOUR) AS end_time
FROM mysql.help_topic
WHERE DATE_ADD(p_begin_time,INTERVAL 1*(help_topic_id+1) HOUR)<=p_end_time
)b ON a.date>=b.begin_time AND a.date<=b.end_time
GROUP BY b.begin_time;
ELSEIF p_type='1day' THEN
SELECT b.begin_time,COUNT(a.id) AS cnt
FROM history_detail a
RIGHT JOIN
(
SELECT DATE_ADD(DATE(p_begin_time),INTERVAL 1*help_topic_id DAY) AS begin_time,DATE_ADD(DATE(p_begin_time),INTERVAL 1*(help_topic_id+1) DAY) AS end_time
FROM mysql.help_topic
WHERE DATE_ADD(DATE(p_begin_time),INTERVAL 1*(help_topic_id+1) DAY)<=DATE(p_end_time)
)b ON a.date>=b.begin_time AND a.date<=b.end_time
GROUP BY b.begin_time;
ELSEIF p_type='1month' THEN
SELECT b.begin_time,COUNT(a.id) AS cnt
FROM history_detail a
RIGHT JOIN
(
SELECT DATE_ADD(DATE(DATE(p_begin_time)-DAY(p_begin_time)+1),INTERVAL 1*help_topic_id MONTH) AS begin_time,
DATE_ADD(DATE(DATE(p_begin_time)-DAY(p_begin_time)+1),INTERVAL 1*(help_topic_id+1) MONTH) AS end_time
FROM mysql.help_topic
WHERE DATE_ADD(DATE(DATE(p_begin_time)-DAY(p_begin_time)+1),INTERVAL 1*(help_topic_id+1) MONTH)<=DATE_ADD(DATE(DATE(p_end_time)-DAY(p_end_time)+1),INTERVAL 1 MONTH)
)b ON a.date>=b.begin_time AND a.date<=DATE_ADD(DATE_ADD(b.end_time,INTERVAL 1 MONTH),INTERVAL -1 DAY)
GROUP BY b.begin_time;
ELSE
SELECT b.begin_time,COUNT(a.id) AS cnt
FROM history_detail a
RIGHT JOIN
(
SELECT DATE_ADD(DATE(CONCAT(LEFT(p_begin_time,4),'-01-01')),INTERVAL 1*help_topic_id YEAR) AS begin_time,
DATE_ADD(DATE(CONCAT(LEFT(p_begin_time,4),'-01-01')),INTERVAL 1*(help_topic_id+1) YEAR) AS end_time
FROM mysql.help_topic
WHERE DATE_ADD(DATE(CONCAT(LEFT(p_begin_time,4),'-01-01')),INTERVAL 1*(help_topic_id+1) YEAR)<=DATE_ADD(DATE(CONCAT(LEFT(p_end_time,4),'-01-01')),INTERVAL 1 YEAR)
)b ON a.date>=b.begin_time AND a.date<b.end_time
GROUP BY b.begin_time;
END IF;
END$$
DELIMITER ;
自己调整