我有一个表,它有超过一百万个时间戳行,有没有办法让我选择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 |
+---+

注意,在大约1百万的结果,这个解决方案不会很好的规模。改用变量作为排名位。

关于mysql - SQL选择随时间分布的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17468988/

10-10 22:07