我有一个表, Measures
, 列: timestamp
(Unix 时间戳), tag
, value
. 要获得一个单一的移动平均线,比如 15 天,我可以执行以下操作:
SELECT tag,avg(value)
FROM measures
WHERE tag='xtr'
AND timestamp<1353304800
AND timestamp>1350622800
GROUP BY tag;
现在我想获得 150 条最新行的移动平均值,但我不知道如何查询它。
SELECT t, s,avg(bv)
FROM
(SELECT A.timestamp as t,A.tag as ta,A.value as ac, B.timestamp as tb,B.value as bv,
FROM measures
CROSS JOIN measures B
WHERE A.tag='xtr' AND B.tag='xtr'
GROUP BY A.tag) WHERE ROWNUM <= 150;
这显然是错误的,但我一直在考虑它并无法弄清楚。有任何想法吗?我的思路是,我需要将每个条目与它下面的 150 个条目进行匹配,并计算value
这 150 个条目的平均值。我也很确定没有 a 可能有更好的方法CROSS JOIN
,因为那会很慢。