在MySQL中聚合/分组一组行/记录

时间:2014-06-27 12:43:55

标签: mysql sql

我有一张桌子说"样品"每五分钟就会保存一条新记录。 用户可能会要求收集特定采样间隔的数据,例如10分钟或30分钟或一小时。

由于我每五分钟就有一条记录,当用户要求一小时采样间隔的数据时,我必须将每12条(60/5)记录分组/分组到一条记录(已根据时间排序) -stamp),标准可以是min / max / avg / last value。

一旦我获取所有记录,我试图在Java中执行此操作,并且我看到非常糟糕的性能,因为我必须多次遍历集合,我已经阅读了其他替代方案,如jAgg和lambdaj,但是想要检查如果这可能在SQL(MySQL)本身。

采样间隔是动态的,聚合函数(min / max / avg / last)也是用户提供的。

任何指针?

1 个答案:

答案 0 :(得分:1)

您可以在SQL中执行此操作,但您必须仔细构造语句。以下是所有四个聚合的小时示例:

select min(datetime) as datetime,
       min(val) as minval, max(val) as maxval, avg(val) as avgval,
       substring_index(group_concat(val order by datetime desc), ',', 1) as lastval
from table t
group by floor(to_seconds(datetime) / (60*60));