如何 select GROUP BY 中的其他行

How to select other rows in GROUP BY

抱歉标题不好。我不知道如何更好地总结它。 我有一个带有 unix 时间戳和其他值的 table,如下所示。

time value
1620916380 110
1620916440 100
1620916500 120
1620916560 120
1620916660 90

条目始终相隔一分钟。 我想将条目分组为 5 分钟的块,并取平均值。目前我使用这个:

SELECT time, avg(value)
FROM table
GROUP BY CEIL(time/ 300)
ORDER BY time ASC;

结果:

time avg(value)
1620916380 108

因此,显示第一次出现的时间。我希望显示最后一个:

time avg(value)
1620916660 108

我该怎么做?我使用 MariaDB。

尝试下单时间降序..如下 SELECT time, avg(value) FROM table GROUP BY CEIL(time/ 300) ORDER BY time DESC

你不就是想要 MAX(time) 吗?

SELECT MAX(time) AS time
     , avg(value)
  FROM table
 GROUP BY CEIL(time/ 300)
 ORDER BY time ASC
;

为了完整性,我们应该提到原始查询无效(根据标准 SQL),即使 MariaDB 可以配置为允许它。

原因是 select list 中的 time 在功能上不依赖于 GROUP BY CEIL(time/300)

在解决方案中选择 MAX(time) AS time 更正了上述功能依赖问题,并且还更正了尝试使用 ORDER BY time 时的类似问题,这也是原始查询中的问题。

SELECT MAX(time), avg(value)
FROM table
GROUP BY CEIL(time/ 300)
ORDER BY time ASC;