我有一张带有最新天气参数的表。我需要每天早上7点运行一个脚本,以汇总前24小时(早上7点至早上7点)的降雨情况。
日期列的表标题为LogDateTime,其格式为YYYY-MM-DD HH:MM:SS。降雨列的标题为TodayRainSoFar,格式为#。##
要下今天的雨,粗糙的代码应该是这样的:
Select TodayRainSoFar
From 'monthly'
WHERE LogDateTime Like '(current date, but I can't get anything to work here) 07:00:00'
使昨天早上7点到晚上11:59降雨的粗糙代码应该是这样的:
Select TodayRainSoFar
From 'monthly'
WHERE LogDateTime Like '(current date minus 1, but I can't get anything to work here) 23:59:00'
minus
Select TodayRainSoFar
From 'monthly'
WHERE LogDateTime Like '(current date - 1, but I can't get anything to work here) 07:00:00'
请让我知道是否应包含其他任何内容以提供帮助。我知道基本代码(Google当然也可以),但是有关此数据库的所有其他信息都是自动化的,并非由我设置。
答案 0 :(得分:2)
要获取总和,请使用sum()
聚合函数。要限制记录的时间戳,请使用date_add()
提供的日期算法。可以使用curdate()
获取当天的数据。
SELECT sum(todayrainsofar)
FROM monthly
WHERE logdatetime >= date_add(date_add(curdate(), INTERVAL -1 DAY), INTERVAL 7 HOUR)
AND logdatetime < date_add(curdate(), INTERVAL 7 HOUR);
答案 1 :(得分:1)
SELECT CONCAT_WS(' ', CURRENT_DATE(), '07:00:00')
应该在上午7点给您这样的约会日期:“ 2018-07-22 07:00:00”
要获取前一天,只需执行DATE_SUB,如下所示:
SELECT CONCAT_WS(' ', (DATE_SUB((CURRENT_DATE()) , INTERVAL 1 DAY)), '07:00:00')
那应该给你'2018-07-21 07:00:00'-对我来说确实如此。 然后,执行相同的代码,但将“ 23:59:59”代替“ 07:00:00”。 如果要查找相等性,则应使用“ =”运算符而不是“ LIKE”。 例如“ WHERE LogDateTime =(concat_ws('',current_date(),'07:00:00'))。
如果您想从早上7点到晚上11:59,要昨天下雨,我会以这种方式使用“ BETWEEN”:
WHERE LogDateTime BETWEEN (concat_ws(' ', current_date(), '07:00:00')) AND
(CONCAT_WS(' ', (DATE_SUB((CURRENT_DATE()) , INTERVAL 1 DAY)), '23:59:59') )
看看这是否适合您。哦,如果可以的话,我想补充一点:在WHERE子句中使用列函数(例如CONCAT和DATE_SUB)不是您要对大数据集执行的操作,因为MySQL优化器实际上没有办法最佳的访问路径。在这种情况下,我认为它会很好。