线索数据平台推送(My Sql数据库)

1 /*
2     定义一个变量,存储所有店的店头ID
3     分别取到每个店的客户InvitedPerson(取到这个店的所有线索)
4     对取到的线索进行筛选:按照时间对所有的线索进行排序
5     定义一个变量,去重之后的InvitedPerson存储起来
6     按照InvitedPerson查找出来的两条或者N条线索,只取第一条进行平台推送
7 */

select * from dyhl_clue where DearShipID=2 ORDER BY F_CreatorTime

/*SELECT DISTINCT <字段名> FROM <表名>*/
SELECT DISTINCT InvitedPerson FROM dyhl_clue where DearShipID=2

待测试的存储过程:
数据库是否支持  for循环:
ids =select id from table)                            定义一个变量,存储需要循环的数据
for id in ids{
targetSql: update XXX from table2 where key_id = id;                进行循环,分别执行SQL语句
};

//创建存储过程前先检查是否存在,存在就删除,这个可以忽略
DROP PROCEDURE IF EXISTS staff_zt_test;
//存储过程
CREATE PROCEDURE staff_zt_test()
BEGIN
    //该变量用于标识是否还有数据需遍历
    DECLARE flag INT DEFAULT 0;
    //创建一个变量用来存储遍历过程中的值
    DECLARE id BIGINT(40);
    //查询出需要遍历的数据集合
    DECLARE idList CURSOR FOR (SELECT id FROM table WHERE a = 1);
    //查询是否有下一个数据,没有将标识设为1,相当于hasNext
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
    //打开游标
    OPEN idList;
        //取值设置到临时变量中
        FETCH idList INTO id;
        //遍历未结束就一直执行
        WHILE flag != 1 DO
                -- targetSQL //你想要执行的目标功能,这里可以写多个SQL
                
                //  注意
                //这里有一个坑,目标语句引用临时变量,实测发现不需要加@符号,但是搜索到的结果都是例如:@id ,这样来使用,实测发现无法取到数据
                //  注意

                update XXX from table2 where key_id = id;
                //一定要记得把游标向后移一位,这个坑我替各位踩过了,不需要再踩了
                FETCH idList INTO id;
        END WHILE;
    CLOSE idList;
END;
原文地址:https://www.cnblogs.com/caoxiaole/p/12787674.html