0

如果之前有人问过这个问题,我深表歉意。我尝试进行搜索,但可能没有使用与其他人相同的措辞,因此我的搜索一无所获。

我有一个刚刚超过 6000 行的表,我正在尝试对特定列的前 n 行进行平均。在这种情况下,外汇货币对的收盘价。(我知道我可以使用 PHP::Trader,但我无权在我的服务器上安装它。)

我试过了 :

SELECT *, (SELECT AVG(close) 
    FROM `2015_EURUSD_60min` 
    WHERE (id > (id - 20) AND id <= id)
) 
FROM `2015_EURUSD_60min`

这为每一行生成了相同的数字,我不知道为什么。列中的每个值id都是连续的。我清理了数据以确保这一点。

我在SELECT陈述中做错了什么?

4

1 回答 1

0

我想我找到了我的问题的答案(虽然性能很慢):

SELECT *, @s:=@s+1 serial_num, 
    (SELECT AVG(close) 
     FROM `2015_EURUSD_60min` 
     WHERE (id > (@s-20) AND id <= @s )) prior_id 
FROM `2015_EURUSD_60min`, (SELECT @s:=0) AS s
于 2016-09-06T01:26:36.043 回答