mysql_游标使用

#每天首次订购用户数
DELIMITER//
DROP PROCEDURE IF EXISTS `首次订购次数查询`//
CREATE PROCEDURE `首次订购次数查询`(IN date1 date,IN date2 date)
BEGIN
#DECLARE @date3 INT DEFAULT 0;
    DECLARE done INT DEFAULT 0;
    DECLARE date_ date;
    #DECLARE date_1 date;
    DECLARE cs1 CURSOR FOR SELECT DISTINCT g.`订购日期` FROM (
    SELECT a.`订购日期`,a.`用户ID` FROM (SELECT `订购日期`,`用户ID` FROM `订购来源明细` WHERE `订购产品` = '游戏xxx' AND `订购日期` BETWEEN date1 AND date2 )a GROUP BY a.`订购日期`,a.`用户ID`)g;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    OPEN cs1;
    DROP TEMPORARY TABLE IF EXISTS b2;
    CREATE TEMPORARY TABLE b2
    SELECT `订购日期`,`用户ID`,`历史订购成功次数` '订购次数' FROM `订购来源明细` WHERE `订购日期` =0;
myloop:loop
        FETCH NEXT FROM cs1 INTO date_;
        SET @str1:=date_;
        IF done =1 THEN
            LEAVE myloop;
        END IF;
            INSERT INTO b2
        SELECT a.`订购日期`,a.`用户ID`,c.`订购次数` FROM 
        (SELECT * FROM (select * FROM (SELECT `订购日期`,`用户ID` FROM `订购来源明细` WHERE `订购产品` = '游戏xxx' AND `订购日期` BETWEEN date1 AND date2 )n GROUP BY n.`订购日期`,n.`用户ID`)h WHERE h.`订购日期`= (SELECT @str1))a
        LEFT JOIN 
        (SELECT b.`用户ID` ,count(1) '订购次数' FROM (SELECT `订购日期`,`用户ID` FROM `订购来源明细` WHERE `订购产品` = '游戏xxx' AND `订购日期` < (SELECT @str1))b GROUP BY b.`用户ID`) c
        ON a.`用户ID`=c.`用户ID`;
    END LOOP myloop;
    CLOSE cs1;
    SELECT d.`订购日期`,COUNT(1) '首次订购人数' FROM(SELECT * FROM b2 WHERE `订购次数` IS NULL )d GROUP BY d.`订购日期`;
    #SELECT @str1;
END//
DELIMITER;

你可能感兴趣的:(mysql_游标使用)