如何将时间列分别分组为 5 分钟间隔和最大值/最小值 SQL?

Ava*_*lla 5 mysql sql database select

我有一个包含 +/- 30 秒间隔的日期时间列和包含 10 到 100 之间随机数的列的数据库。我的表如下所示:

datetime               value
----------------------------
2016-05-04 20:47:20    12
2016-05-04 20:47:40    44
2016-05-04 20:48:30    56
2016-05-04 20:48:40    25
2016-05-04 20:49:30    92
2016-05-04 20:49:40    61
2016-05-04 20:50:00    79
2016-05-04 20:51:20    76
2016-05-04 20:51:30    10
2016-05-04 20:51:40    47
2016-05-04 20:52:40    23
2016-05-04 20:54:00    40
2016-05-04 20:54:10    18
2016-05-04 20:54:50    12
2016-05-04 20:56:00    55
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

datetime               max_val    min_val
-----------------------------------------
2016-05-04 20:45:00    92         12
2016-05-04 20:50:00    79         10
2016-05-04 20:55:00    55         55
Run Code Online (Sandbox Code Playgroud)

之前,我甚至可以继续获得最大值和最小值,我首先要GROUP日期时间列分成5个分钟的间隔。根据我的研究,我想出了这个:

SELECT
  time,
  value
FROM random_number_minute
GROUP BY
  UNIX_TIMESTAMP(time) DIV 300
Run Code Online (Sandbox Code Playgroud)

这实际上的datetime列到5个分钟为间隔是这样的:

datetime
-------------------
2016-05-04 20:47:20
2016-05-04 20:50:00
2016-05-04 20:56:00
Run Code Online (Sandbox Code Playgroud)

这非常接近,因为它需要下一个最接近的日期时间到,在这种情况下,20:45:0020:50:00等我想ROUNDDOWN日期时间到最近的5分钟不分的,例如,如果分钟数:

minutes    rounddown
--------------------
10         10
11         10
12         10
13         10
14         10
15         15
16         15
17         15
18         15
19         15
20         20
Run Code Online (Sandbox Code Playgroud)

时间可能是14:59,我想四舍五入10:00。经过数小时的研究,我也尝试使用它:

SELECT
    time,
    time_rounded =
    dateadd(mi,(datepart(mi,dateadd(mi,1,time))/5)*5,dateadd(hh,datediff(hh,0,dateadd(mi,1,time)),0))
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,这并没有奏效。我收到此错误:

调用本机函数“datediff”时参数计数不正确

我也试过这个:

SELECT  
    time, CASE  
          WHEN  DATEDIFF(second, DATEADD(second, DATEDIFF(second, 0, time_out) / 300 * 300, 0), time) >= 240
            THEN    DATEADD(second, (DATEDIFF(second, 0, time) / 300 * 300) + 300, 0)
            ELSE    DATEADD(second, DATEDIFF(second, 0, time) / 300 * 300, 0)
          END
Run Code Online (Sandbox Code Playgroud)

返回相同的错误。

我怎样才能做到这一点?而在日期时间分组后,如何获取数据分组的最大值和最小值?

Str*_*rry 2

抱歉,如果我重复另一个答案。如果是的话我就删了..

SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(datetime)/300)*300) x
     , MIN(value) min_value
     , MAX(value) max_value 
  FROM my_table 
 GROUP 
    BY x;
Run Code Online (Sandbox Code Playgroud)