(针对 SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
数据库名称:MySQL
数据库版本:5.6
内容/问题描述:
在写一个Hourly Event的store procedure
执行的内容就是会把table A每小时的资料运算后写到table B
但怕误执行所以想做个防止重复写入的判断
却在这里遇到一个小问题
当table还未写入任何资料的时候
我的判断式就会有问题,以下是我的schema和SQL
table B
id m_n c_date
1 aa 2015-11-19 23:55:00
2 bb 2015-11-19 23:55:00
3 aa 2015-11-20 00:05:00
4 bb 2015-11-20 00:05:00
5 aa 2015-11-20 00:10:00
6 bb 2015-11-20 00:10:00
原本的条件是这样:
SELECT HOUR(NOW()) - HOUR(c_date) as c_d
FROM B
ORDER BY c_date DESC
LIMIT 1;
正常的情况下,若现在是2015-11-20 01:00:00
那我SELECT出来的值就会是 01-00=1
我用一个指标来接这个select出来的值
接着后面会进行if的判断式
如果是0就表示目前最近一个小时内已执行过
所以就会跳出这个store procedure
如果不是0就会继续做后面的动作
现在的问题是,当这个表第一次执行的时候会是空的
得到的值就不会是0,然后似乎在开启指标时就会有问题
因而造成这个Event就没有执行成功
我试着用以下这个方式来避免这个情况发生:
SELECT CASE WHEN COUNT(*)=0 THEN 1
ELSE HOUR(NOW()) - HOUR(create_time) END as c_d
FROM B
ORDER BY c_date DESC
LIMIT 1;
但这样一直变成 01-23=-22
为什么不是我预想中的 01-00 呢?
为什么它这样就不会照c_date做排序了吗?
有没有前辈知道原因为何??
我是store procedure新手,也不知道有没有更好的方式来处理
如果前辈们知道更好的方式,还请您不吝赐教~~~