在过去24小时内从mysql中选择行,并根据间隔x跳过行?

ghhaqwfi  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(302)

我已经创建了一个交易机器人,我使用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 ```
TimeStampRefrenceID

  1. 2018-12-14 23:00:05 1001
  2. 2018-12-14 23:05:10 1001
  3. 2018-12-14 23:11:16 1001
  4. 2018-12-14 23:16:21 1001
  5. 2018-12-14 23:21:25 1001
  6. 2018-12-14 23:26:30 1001
  7. 2018-12-14 23:32:41 1001
  8. 2018-12-14 23:37:46 1001
  9. 2018-12-14 23:42:51 1001
  10. 2018-12-14 23:47:51 1001
  11. 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
am46iovg

am46iovg1#

使用窗口函数(mysql-8.0、mariadb-10.2),我们 DIV 600 按10分钟(600秒)的间隔划分。我们按id在每组中取第一名。

SELECT id, entrytime, RefrenceID
FROM ( 
  SELECT 
    id, entrytime, RefrenceID,
    ROW_NUMBER() OVER (PARTITION BY RefrenceID,UNIX_TIMESTAMP(entrytime) DIV 600 ORDER BY id) AS `rank`
  FROM timedata 
  ORDER BY id 
) AS tmp 
WHERE tmp.`rank` = 1
ORDER BY id, entrytime;

参考:D小提琴

xuo3flqw

xuo3flqw2#

SELECT * 
FROM PriceHistory 
WHERE 
    `RefrenceID`=1001
    AND `TimeStamp` > (SELECT max(`TimeStamp`) FROM PriceHistory) - Interval 1440 Minute
    AND substring_index(TimeStamp,':',1)%5=0
GROUP BY `TimeStamp`;

相关问题