我一直在尝试和尝试,但无法弄清楚这一点。
在具有开盘价、最高价、最低价、收盘价的股票图表中,您始终可以每分钟、5 分钟、10 分钟、每小时等图表。我每分钟都有数据,我正在尝试选择开盘价、最高价、最低价, 关闭每分钟的数据,但每 5 分钟。
我有类似这样的数据:
__________________________________________________
| Date | TIME | TICKER | Open | High | Low | Close |
| 20121203 | 090000 | QQQQ | 23.54 | 24.12 | 23.01 | 23.24 |
| 20121203 | 090100 | QQQQ | 23.24 | 24.14 | 22.98 | 24.13 |
| 20121203 | 090200 | QQQQ | 24.13 | 25.88 | 23.75 | 25.81 |
| 20121203 | 090300 | QQQQ | 25.81 | 25.83 | 24.63 | 24.99 |
| 20121203 | 090400 | QQQQ | 24.99 | 25.21 | 23.89 | 24.12 |
| 20121203 | 090500 | QQQQ | 24.12 | 24.19 | 21.94 | 22.03 |
| 20121203 | 090600 | QQQQ | 22.03 | 22.97 | 20.68 | 21.44 |
| 20121203 | 090700 | QQQQ | 21.44 | 24.06 | 19.32 | 23.56 |
| 20121203 | 090800 | QQQQ | 23.56 | 25.48 | 23.07 | 25.01 |
| 20121203 | 090900 | QQQQ | 25.01 | 28.00 | 24.18 | 27.21 |
| 20121203 | 091000 | QQQQ | 27.21 | 27.55 | 24.31 | 24.31 |
我需要获取时间 >= 090000(即上午 9 点)09 小时 00 分 00 秒的行的最大值(高)。
与此类似,我需要 min(low),然后我将在时间为 090400 时获取收盘价,因为我每 5 分钟获取一次。我也可以使用下一个 5 分钟增量的开盘,这样很灵活。
我使用了嵌套的 SELECT 语句、多个连接等。问题是 MySQL 执行时间大约为每行返回 1 秒。当您计算出每小时有 12 行(60 分钟 / 5 分钟 = 12)时,这真是太慢了,然后因为我实际上在做外汇交易,所以交易是全天候的,所以是 24 小时。这给了我每天 288 次,或者每天不到 5 分钟。做 1 年的数据(约 250 个交易日)大约需要 20 个小时。必须有更快的方法。
我有一些解决方案,ID 是连续的,虽然这可能是最简单的,但我不能 100% 确定我的数据在这样做时是否正确。原因是周五交易日在纽约的正常营业时间结束,并在东京的第一笔交易开始(大约在美国的午后)。
我查看了 GROUP BY,但我不确定如何将数据分组以获得 5 组,其中时间在每个 5 分钟组的 5 分钟内。
感谢您的想法和讨论。
贾罗德