版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
需求:当月购买的秤数量
分析:表里要有两个字段,日期(YYYY-MM)、秤数量;从相关表中获取这两个字段,设置时间;建立事件,调用存储过程
1.建表
drop table `rate_a`
create table `rate_a`(
`id` int(11) not null auto_increment,
`date_a` date default null,
`num_a` int(11) default "0",
PRIMARY key(`id`),
key `date_a`(`date_a`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
注意字段的类型:date就是YYYY-MM-DD 如果插入的数据不符合,就返回为0
2.建立存储过程
CREATE DEFINER=`bianla_xujh`@`localhost` PROCEDURE `rate_a`(IN current_t DATE)
BEGIN
SET @date:= DATE_ADD(current_t,INTERVAL -1 MONTH),
@date_f:= DATE_FORMAT(@date,'%Y-%m-01 00:00:00'),
@date_t:= DATE_FORMAT(Last_DAY(@date),'%Y-%m-%d 23:59:59');
DELETE FROM `rate_a` WHERE date_a=date_format(@date,'%Y-%m');
INSERT INTO `rate_a`(`date_a`,`num_a`)
SELECT
aa.date_a,
aa.num_a
FROM
(
SELECT
date_format(a.created,'%Y-%m-%d') as date_a,
count( DISTINCT a.buyer_user_id ) AS num_a
FROM
bianla_warespage_order AS a
WHERE
STATUS IN ( 10, 20 ) # 10,20 代表购买
AND created BETWEEN @date_f
AND @date_t
) AS aa;
END
3.建立事件
begin
call rate_a('2019-01-01');
end
时间的设置在 计划 中
要明白自己写的逻辑,从逻辑的最开始找问题,一步一步排查(从一大堆代码中根据自己的思路流程,一点一点排查),结合报错信息,可以更快捷;如果没有报错,那就是自己的思维漏洞,一定要仔细筛选
问题:1.由于在第二步中我们有 变量,所以要在里面给变量赋值,注意变量 的类型,对于日期要加 ’ ’
1.确保自己有建立存储,事件的权限
2.确保事件是开着的
3.若表已经存在,先删除表
4.建立表,注意类型,自增主键等等
5.建立存储过程:里面包含查询、插入、时间、变量等语句
- 要先测试查询语句是正确的
- 插入表中的字段名要保证顺序,名称一致
- 一般我们都是设置时间为变量,
- 删除语句要有条件,一般都是我们设置的时间变量,也就是我们插入不成功时,要删除的那一条记录;如果没有条件会进行全表清空。
Unknown column 'num_1' in 'field list'
一般是 要插入的字段名与表里面的字段名不一致,要检查表名- 插入不成功时,要看是否有权限,是否开了事件,字段名是否一致