日安,
我使用下面的代码来计算9天移动平均线。
SELECT SUM(close)
FROM tbl
WHERE date <= '2002-07-05'
AND name_id = 2
ORDER BY date DESC
LIMIT 9
字符串
但是它不起作用,因为它首先计算所有返回的字段,然后才调用limit。换句话说,它将计算所有在该日期之前或等于该日期的收盘价,而不仅仅是最后9个。
所以我需要从返回的select中计算SUM,而不是直接计算。
IE.从SELECT中选择SUM.
那么我该怎么做呢?成本很高吗?或者有更好的方法吗?
6条答案
按热度按时间2g32fytz1#
这个查询很快:
字符串
如果你需要一个超过50或100个值的平均值,写起来很乏味,但值得努力。速度接近有序选择。
ca1c2owp2#
移动中位数(如果有人需要)
字符串
ffvjumwh3#
如果你想要每个日期的移动平均值,那么试试这个:
字符串
它使用相关子查询来计算9个值的平均值。
qmb5sa224#
从MySQL 8开始,你应该使用窗口函数来实现这一点。使用window
RANGE
子句,你可以在一个时间间隔内创建一个logical window,这是非常强大的。像这样:字符串
举例来说:
型
导致:
型
y1aodyip5#
使用类似于
字符串
内部查询以
desc
顺序返回所有筛选的行,然后对返回的行进行avg
、sum
。您给出的
query
不起作用的原因是,首先计算sum
,然后在计算sum
之后应用LIMIT
子句,从而为您提供所有行的sum
oymdgrw76#
另一个技巧是做一个表格:
字符串
你可以这样使用它:
型