我已经创建了一个交易机器人,我使用mysql导入数据和计算技术指标,我想创建一个功能,使我能够更频繁地导入数据和控制我如何选择数据的间隔。
是否有一个查询允许我在mysql中以固定的间隔选择数据?
SELECT * FROM PriceHistory
WHERE `RefrenceID`=1001
and `TimeStamp` > (SELECT max(`TimeStamp`) FROM PriceHistory) -
Interval 1440 Minute
Group by `TimeStamp`;
使用这个查询,我可以选择过去24小时的价格数据。有没有一个解决方案可以让我以5分钟、10分钟、30分钟等间隔选择数据? DataSet Example
```TimeStamp
RefrenceID
- 2018-12-14 23:00:05 1001
- 2018-12-14 23:05:10 1001
- 2018-12-14 23:11:16 1001
- 2018-12-14 23:16:21 1001
- 2018-12-14 23:21:25 1001
- 2018-12-14 23:26:30 1001
- 2018-12-14 23:32:41 1001
- 2018-12-14 23:37:46 1001
- 2018-12-14 23:42:51 1001
- 2018-12-14 23:47:51 1001
- 2018-12-14 23:52:56 1001
我想到了两种可能的解决方案不幸的是,我还没有想出如何实现它们。
在我的表中添加一个自动递增id,创建一个选择行号的查询。创建局部变量 `@rownum` 选择@rownum=@rownum+(间隔)的所有行。
选择第一个时间戳,创建一个局部变量 `@start_time` , `@offset` , `@count` 然后选择min( `TimeStamp` )>@开始时间+间隔( `@offset` * `@count` )分钟
使用自动递增id解决方案所面临的问题是,我正在跟踪同一个表中220个项目的价格(因此顺序id将不起作用),因此可能需要在查询开始时创建一个新的索引行。我面临的另一个问题是,我的代码是同步的,因此由于其他正在运行的进程,每次数据导入都在5分钟到5分钟30秒之间。
谢谢你的帮助!
致以最诚挚的问候,
啜食 `Expected output:` ```
1. 2018-12-14 23:00:05 1001
3. 2018-12-14 23:11:16 1001
5. 2018-12-14 23:21:25 1001
7. 2018-12-14 23:32:41 1001
9. 2018-12-14 23:42:51 1001
11. 2018-12-14 23:52:56 1001
2条答案
按热度按时间am46iovg1#
使用窗口函数(mysql-8.0、mariadb-10.2),我们
DIV 600
按10分钟(600秒)的间隔划分。我们按id在每组中取第一名。参考:D小提琴
xuo3flqw2#