今天我有RainSoFar列,它每分钟填充到db中,我想找出这个月的最大降雨时间,即什么时候开始下雨以及持续多长时间。
例如2014年1月1日08:00开始下雨,直到2014-04-05 10:00一直没有下雨
我在合并查询时遇到麻烦。
// this will select rows when there was any rain this month
SELECT LogDateTime, TodayRainSoFar
FROM sibeniku_monthly
WHERE TodayRainSoFar > 0.0
AND DATE_FORMAT(LogDateTime, "%m.") = 04
现在我正在寻找一些东西来计算中间行的最大持续时间(LogDateTime是日期时间,范围是1分钟),像
AND MAX (COUNT BETWEEN rows)
最佳答案
下面使用的方法是保持一个连续下雨分钟的计数器,然后获取具有该计数器最大值的行(这将为您提供连续下雨的最大持续时间)。如果降雨结束,计数器将重置为0。
SELECT DATE_SUB(LogDateTime, INTERVAL counter MINUTE) AS StartTime, LogDateTime AS EndTime FROM (
SELECT IF(TodayRainSoFar = 0, @i:=0, @i:=@i+1) AS `counter`,
LogDateTime, TodayRainSoFar
FROM
sibeniku_monthly, (SELECT @i:= 0) i
ORDER BY LogDateTime
) t
ORDER BY `counter` DESC
LIMIT 0,1
工作演示:http://sqlfiddle.com/#!2/8578b8/8
关于mysql - 选择中间有数据的日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22932793/