日维度数据表存储过程
模拟车站日均客流数据存储过程:
1、针对换乘站与普通车站,进行不同范围数据随机生成
换乘站 : 4 ~ 6w客流量随机
普通站 : 2 ~ 3w客流量随机
2、针对工作日与周末进行换乘站与普通车站客流计数增加
换乘站 : 周末 增加 1w客流基数
普通站 : 周末 增加 3000客流基数
CREATE DEFINER=`guijiao`@`%` PROCEDURE `product_allStation_passFlow`()
BEGIN
-- 设置开始结束时间
DECLARE
startDay DATETIME DEFAULT date_format('2019-07-30','%Y-%m-%d');
DECLARE
endDay DATETIME DEFAULT date_format('2020-06-10','%Y-%m-%d');
-- 定义车站起始id
DECLARE
startStationId int DEFAULT 80;
DECLARE
endStationId int DEFAULT 101;
-- 定义周末额外客流量
DECLARE
hWeek int DEFAULT 10000;
DECLARE
pWeek int DEFAULT 3000;
DECLARE
hStation int DEFAULT 10000;
DECLARE
pStation int DEFAULT 3000;
-- 日期范围循环
WHILE
TO_DAYS(startDay) <> TO_DAYS(endDay)
DO
-- 判断是否需要车站id归零
IF startStationId = endStationId
then
-- 车站id归零
SET startStationId = 80;
end if;
-- 判断当前日期是否是周末,周末则增加额外客流,非周末正常
if DAYOFWEEK(startDay) = 7 or DAYOFWEEK(startDay) = 1
then
-- 增加额外量
set hStation = hWeek;
set pStation = pWeek;
else
-- 额外量清零
set hStation = 0;
set pStation = 0;
end if;
-- 车站id循环插入数据
WHILE startStationId <> endStationId
DO
-- 判断是否是换乘站 换乘站客流增加
IF startStationId = 80 or startStationId = 83 or startStationId = 88 or startStationId = 93
THEN
-- 换乘站客流量 4w~6w随机
INSERT INTO `test_db`.`passflow_day`(`data_id`, `data_time`, `location_id`, `passflow`) VALUES (date_format(startDay,'%Y%m%d'),startDay, startStationId, floor(39999+rand()*20000) + hStation);
-- 车站id ++
set startStationId = startStationId + 1;
ELSE
-- 普通车站客流量 2w~3w随机
INSERT INTO `test_db`.`passflow_day`(`data_id`, `data_time`, `location_id`, `passflow`) VALUES (date_format(startDay,'%Y%m%d'),startDay, startStationId, floor(19999+rand()*10000) + pStation);
-- 车站id ++
set startStationId = startStationId + 1;
END IF;
END WHILE;
-- 设置时间间隔
SET startDay = DATE_ADD(startDay, INTERVAL 1 DAY);
END WHILE;
END