使用MySQL选择随时间推移的大量数据

Kir*_*met 5 mysql sql

我有超过40年的数十万个价格点.我想构建一个只返回3000个总数据点的查询,其中最后500个是最新的数据点,另一个2500只是其余数据的样本,均匀分布.

是否可以在一个查询中执行此操作?我如何只选择大量数据的样本?这是我仅仅获取其他2500个数据点的样本的一个小例子:

1
2
3    
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

我想要返回这样的东西:

1
5
10
Run Code Online (Sandbox Code Playgroud)

这是过去500的查询:

SELECT * FROM price ORDER BY time_for DESC LIMIT 500
Run Code Online (Sandbox Code Playgroud)

我不知道如何从其他数据点获取样本数据.

Ari*_*iel 5

试试这个:

(SELECT * FROM price ORDER BY time_for DESC LIMIT 500)
UNION ALL
(SELECT * FROM price WHERE time_for < (SELECT time_for FROM price ORDER BY time_for LIMIT 500, 1) ORDER BY rand() LIMIT 2500)
ORDER BY time_for
Run Code Online (Sandbox Code Playgroud)

注意:它可能会很慢.这张桌子有多大?

仅从所有这些行获取主ID可能会更快,然后在缩小后将其连接到辅助查询中的原始ID.这是因为ORDER BY rand() LIMIT必须对整个表进行排序.如果表很大,则可能需要很长时间,并且需要大量磁盘空间.仅检索ID可减少必要的磁盘空间.