我有一个带有超过一百万行时间戳的表,有没有办法让我选择均匀分布的 30 行?
因此,如果我的数据表包含五行并且我需要三行,我希望返回第 1、3 和 5 行。
有没有办法在 SQL 中做到这一点?
编辑:
更具体地说,我有一个包含不同 URL 列表的表和另一个表,其中定期获取和存储有关 URL 的数据(在我的情况下是每小时一次)。
我想要做的是能够以日期之间的均匀间隔获取有限数量的数据行(在我的情况下为 30)。从某种意义上说,我想以动态间隔过滤掉数据点。
那有意义吗?
我想你可以考虑这样的事情..
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
现在假设我想从这张表中返回大约 5 个均匀分布的结果......
SELECT x.i
FROM ints x
JOIN ints y
ON y.i <= x.i
GROUP
BY i
HAVING MOD(COUNT(y.i),ROUND((SELECT COUNT(*)/5 FROM ints),0)) = 0; -- where '5' equals the approximate number of results to be returned.
+---+
| i |
+---+
| 1 |
| 3 |
| 5 |
| 7 |
| 9 |
+---+
请注意,在 ca。1m 结果,此解决方案无法很好地扩展。改为使用变量作为排名位。