我有超过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)
我不知道如何从其他数据点获取样本数据.
试试这个:
(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可减少必要的磁盘空间.
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |