我有一个数据库,在那里我存储的各种交易所的产品的最佳出价和要求1分钟的快照。我有一个要求,我需要找到:
- 500个最佳出价和询问3个产品(
product1 & exch1
,product2 & exch2
,product3 & exch3
)
1.所有500个数据点应在一定的时间范围内,例如0900-1014,1030-1129
1.所有3个产品都应该有相同的时间戳,即如果prod 1没有1030个数据点,查询应该忽略prod 2和prod 3 <--* 这就是我卡住的地方 *
我在Ubuntu 20.04上使用MySQL 8.0.35
我的表具有以下结构
symbol(varchar)
exchange(varchar)
bid_price(double)
ask_price(double)
timestamp(bigint) # actual best bid ask received time from exchange (millisecond precision)
updated_at(bigint) # minutes precision stored as seconds since epoch e.g. 1702954500102
个字符
通过下面的查询,我能够完成需求#1和#2,但#3是我还无法弄清楚的
(SELECT *, FROM_UNIXTIME(updated_at, '%H%i') AS u_time
FROM algo_system.bbo_1min
WHERE
(
(symbol = 'prod1' AND exchange = 'exch1')
OR
(symbol = 'prod2' AND exchange = 'exch2')
OR
(symbol = 'prod3' AND exchange = 'exch3')
)
HAVING
(u_time >= 900 AND u_time <= 1014)
OR
(u_time >= 1030 AND u_time <= 1129)
ORDER BY TIMESTAMP DESC LIMIT 500)
型
编辑:从下图中可以看出,突出显示的红色部分具有21:00的prod 2和prod 3数据,但prod 1没有,如果prod 1在21:00 x1c 0d1x没有数据点,我希望删除prod 2和prod 3数据
1条答案
按热度按时间i7uq4tfw1#
一个子连接或者一个where exists查询也可以工作。也要考虑性能--我不知道子查询是否会太慢你的工作。
很抱歉没有在MySQL中回答。
下面是一个在MsSQL中使用内部连接的例子--你可以看到我在哪里稍微修改了一下,以说明MsSQL和MySQL之间的区别。
字符串
所有三个,如果包含prod 1 x1c 0d1x
如果prod 1未显示
,则无
更新:添加了“DISTINCT符号”,以确保所有三种产品都被计数,以防产品可以显示多次。