MSQL按间隔分组吗?

时间:2018-10-17 15:22:05

标签: mysql

我需要编写一个MYSQL select查询来执行以下操作,可能使用Interval,但不确定如何实现。

检索结果组,其中相邻行的日期时间值在5分钟以内。在下面的简化示例中,我需要在一组中检索Bob,Ted和Fred,在另一组中检索Andy,Mike和Bert。

我不知道会有多少个小组。我需要能够确定每个组的开始时间,结束时间以及之间的数据收集。

一旦有了这些组,我就需要能够访问组中每一行的每个值,以便进行进一步的计算

**DB Table**

DateTime          Value
2018-10-17 12:50  Bob
2018-10-17 12:55  Ted
2018-10-17 13:00  Fred
2018-10-17 15:00  Andy
2018-10-17 15:05  Mike
2018-10-17 15:10  Bert

1 个答案:

答案 0 :(得分:2)

在MySql 5.x中,您可以使用变量来计算等级。

示例:

SELECT `DateTime`, `Value`,
CASE
WHEN @prev_dt >= `DateTime` - INTERVAL 5 MINUTE AND @prev_dt := `DateTime` THEN @rank
WHEN @prev_dt := `DateTime` THEN @rank := @rank + 1 -- this WHEN criteria is always true
END AS `Rank`
FROM YourTable t
CROSS JOIN (SELECT @prev_dt := NULL, @rank := 0) vars
ORDER BY `DateTime`;

您将在SQL Fiddle here上找到一个测试

结果:

DateTime             Value Rank
-------------------- ---   ----
2018-10-17T12:50:00Z Bob      1 
2018-10-17T12:55:00Z Ted      1 
2018-10-17T13:00:00Z Fred     1 
2018-10-17T15:00:00Z Andy     2 
2018-10-17T15:05:00Z Mike     2 
2018-10-17T15:10:00Z Bert     2 

在MySql 8.x中,您还可以使用窗口函数LAG来获取先前的DateTime。