今天我有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/

10-13 23:11