我有一个表“我的表”有两列
1. Timestamp (ts)
2. Value (val)
我需要为每个时间戳返回在时间戳上或之前出现的10个最新值的平均值。
我可以通过以下查询执行类似操作:
SELECT t2.ts as time,
AVG(t1.val) as avg_val
FROM table_name as t1, table_name as t2
WHERE t1.ts <= t2.ts
它返回一个时间戳和在该时间戳上或之前出现的所有值的平均值。我需要修改此查询以返回10个最新值的平均值,而不是所有值。
附言:抱歉问得不好。我不知道怎么装帧。
2条答案
按热度按时间bnlyeluc1#
在8版之前的mysql中,没有一种简单的方法来表达这个查询——甚至使用变量。我不会为你的表现担保,但这应该是你想要的:
当然,在8+中,这只是:
edqdpe6u2#
忽略前面的答案。您可以使用“穷人的排名”对按时间戳排序的行进行排名。对于“查找每个列组的前9行”,您可以单独联接结果:
我知道它有点笨拙,但在某些条件下,它可能比相关子查询更好。