mysqli代码帮助

kq4fsx7k  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(309)

我有一张有最新天气参数的table。我需要在每天早上7点运行一个脚本,将之前24小时(7点-7点)的降雨量相加。
日期列的表头为logdatetime,格式为yyyy-mm-dd hh:mm:ss。“降雨”列的标题为TodaySrainsOfar,格式为###
获取今天降雨的粗略代码应该是:

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'

请让我知道是否还有其他需要帮助的地方。我知道基本的代码(当然可以谷歌),但一切关于这个数据库是自动化的,不是我设置的。

qgelzfjb

qgelzfjb1#

要得到总数,请使用 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);
bkhjykvo

bkhjykvo2#

SELECT CONCAT_WS(' ', CURRENT_DATE(), '07:00:00')

应该在早上7点给你这样的约会:“2018-07-22 07:00:00”
要获得前一天,只需按以下方式进行约会:

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\u ws('',current\u date(),'07:00:00'))。
如果你想要昨天早上7点到晚上11点59分的雨,我会用一个“中间”,用这样的方式:

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\u sub)并不是您想要对大型数据集执行的操作,因为mysql优化器实在无法找出最佳访问路径。在这种情况下,我想会很好的。

相关问题