MySQLi代码帮助

时间:2018-07-22 16:59:29

标签: mysql sql mysqli

我有一张带有最新天气参数的表。我需要每天早上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当然也可以),但是有关此数据库的所有其他信息都是自动化的,并非由我设置。

2 个答案:

答案 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优化器实际上没有办法最佳的访问路径。在这种情况下,我认为它会很好。