我有一张包含价格信息的表格。我需要选择每三行的最大值。例子:
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,我想移动到 4 到 6,然后是 7 到 9,等等,直到我对表中包含的所有值(目前大约 400,000 个值)完成了此操作。我已经编写了使用的代码
SELECT max(HIGH) FROM daily_high as dh1 JOIN (SELECT max(HIGH) FROM daily_high WHERE id >= dh1 AND id < (dh1.id + 3))
这可行,但速度非常慢。我尝试使用 SELECT 语句,在该语句中确定要拉出以进行显示的列值,这意味着查询的 SELECT 和 FROM 部分之间。
我尝试使用 JOIN 将所有 3 行加入到同一张表中进行比较,但它也非常慢。慢是指在 10 秒内收集 20 行的信息。这意味着该查询在 9.65879893303 秒内分析了 60 行(20 组,每组 3 行)(我没有编造这个,我使用 microtime() 来计算它。
有人对比我更快的代码有任何建议吗?
请记住,我的实际表格与我在上面发布的表格不同,但概念是相同的。
谢谢你的帮助。