0

この質問が以前に尋ねられていたら、申し訳ありません。検索を試みましたが、他のユーザーと同じ言葉遣いを使用していない可能性があるため、検索しても何もヒットしませんでした。

6000 行をわずかに超えるテーブルがあり、特定の列の前の n 行の平均を計算しようとしています。この場合、FOREX通貨ペアの終値。(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 に答える