如何 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;
抱歉标题不好。我不知道如何更好地总结它。 我有一个带有 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;