価格情報を保持するテーブルがあります。3 行ごとに最大値を選択する必要があります。例:
Table `daily_high`
____ _______
| ID | HIGH |
| 1 | 24.65 |
| 2 | 24.93 |
| 3 | 26.02 |
| 4 | 25.33 |
| 5 | 25.16 |
| 6 | 25.91 |
| 7 | 26.05 |
| 8 | 28.13 |
| 9 | 27.07 |
|____|_______|
Desired output to new table (ID will be auto-increment so don't assume an association exists between this ID 1 and the daily_high ID 1:
____ ___________
| ID | 3MaxHIGH |
|____|___________|
| 1 | 26.02 |
| 2 | 25.91 |
| 3 | 28.13 |
|____|___________|
ID 1、2、および 3 を比較して、それらの中で高い値を判断したいと考えています。次に、1 から 3 を比較したら、テーブルに含まれるすべての値 (現在約 400,000 の値) に対してこれを行うまで、4 から 6、7 から 9 などに移動します。を使用するコードを書きました。
SELECT max(HIGH) FROM daily_high as dh1 JOIN (SELECT max(HIGH) FROM daily_high WHERE id >= dh1 AND id < (dh1.id + 3))
これは機能しますが、非常に遅いです。クエリの SELECT 部分と FROM 部分の間を意味する、表示用にプルする列の値を識別する SELECT ステートメントを使用してみました。
比較のために JOIN を使用して 3 つの行すべてを同じテーブルに結合しようとしましたが、これも非常に遅いです。遅いとは、20 行の情報を収集するのに 10 秒弱かかることを意味します。これは、クエリが 9.65879893303 秒で 60 行 (3 つのグループが 20 行) を分析したことを意味します (私はこれを作成しませんでした。計算には microtime() を使用しました。
私が持っているものよりも速いコードについて何か提案はありますか?
私の実際の表は、上に投稿したものと同じではありませんが、概念は同じであることに注意してください。
助けてくれてありがとう。