我需要编写一个存储过程,我必须找到过去 6 个月中每个月在收音机上播放歌曲的总时间,所以 6 个输出,本月,上个月,依此类推,直到 6 个月前。为此,我必须使用 Track_no 的 start_airtime 和 finish_airtime。这些总和将给我总播出时间,并且必须按每个月份分开,并且输出应包含两列,首先是月份名称,其次是已播出的总时间。
请注意,开始播放时间和结束播放时间是歌曲的长度,但我没有此信息可用于必须从这两个值中得出它。
我的表设置如下:
track_no TINYINT(3) UNSIGNED
genre VARCHAR(60)
purchasedate DATE NOT NULL
start_airtime TIME NOT NULL
finish_airtime TIME
artist CHAR(9)
我对存储过程一无所知,所以任何信息都将不胜感激。非常感谢。
到目前为止,我的代码是:
DELIMITER //
DROP PROCEDURE IF EXISTS airtime_of_month//
CREATE PROCEDURE airtime_of_month(IN track_input TINYINT)
BEGIN
DECLARE x, track_num TINYINT;
DECLARE totalTime VARCHAR(25);
SET x = 7;
SET track_num = track_input;
WHILE x > 1 DO
SET x = x - 1;
SELECT track_no INTO track_num
FROM Radio
WHERE track_input = track_no;
IF (track_input IS NULL) THEN
SELECT CONCAT(track_input, ' Is Not
A Valid Track Number') as _;
ELSE
SELECT track_no,
CONCAT(FLOOR(HOUR(TIMEDIFF(finish_airtime,start_airtime)) / 24), ' days ',
MOD(HOUR(TIMEDIFF(finish_time,start_airtime)), 24), ' hrs ',
MINUTE(TIMEDIFF(finish_airtime,start_airtime)), ' minutes ') AS total_AirTime
FROM Radio
WHERE DATE_SUB(MONTH(purchasedate), INTERVAL x
MONTH);
END IF;
SELECT track_num;
END WHILE;
END //
CALL airtime_of_month (2)/
DELIMITER ;
但是,当我这样做时,它会编译但不会返回任何内容。有任何想法吗?