这是“交易所” table
的定义:
CREATE TABLE `exchange` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rank` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`volume` varchar(255) NOT NULL,
`timestamp` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=75032 DEFAULT CHARSET=utf8;
每5分钟将存储大约209条记录。
如何获取此数据结构?
rank, name, [volume,...](last 144 value), timestamp
我使用以下查询:
SELECT `volume`
FROM `exchange`
WHERE `exchange`.`name` = 'binance'
ORDER BY `timestamp` DESC
LIMIT 144
是否有更好的方法可以一次获取数据?谢谢。
答案 0 :(得分:0)
坦率地说,您的方法可能是最好的方法,尤其是如果您在(name, timestamp)
上有索引。
您可以尝试:
select e.volume
from exchange e
where e.timestamp >= (select e2.timestamp
from exchange e2
where e2.name = e.name
limit 1 offset 143
);
然后您可以将这些值汇总为:
select e.name, sum(e.volume)
from exchange e
where e.timestamp >= (select e2.timestamp
from exchange e2
where e2.name = e.name
limit 1 offset 143
)
group by e.name;
注意:在MySQL 8+中,使用row_number()
更简单:
select name, sum(volume)
from (select e.*,
row_number() over (partition by name order by timestamp desc) as seqnum
from exchange e
) e
where seqnum <= 144
group by name;