SQL用于选择随时间分布的行

时间:2013-07-04 11:21:33

标签: mysql sql

我的表有一百多个带时间戳的行,有没有办法让我选择30行均匀分布?

因此,如果我的数据表包含五行而我需要三行,我想要返回第1,3和5行。

有没有办法在SQL中执行此操作?

编辑:
更具体地说,我有一个包含不同URL列表的表和另一个表,其中有关URL的数据被定期获取和存储(在我的情况下每小时一次)。

我想要做的是能够获取有限数量的数据行(在我的情况下为30),日期之间的间隔为偶数。从某种意义上说,我想以动态的间隔过滤掉数据点。

这有意义吗?

1 个答案:

答案 0 :(得分:4)

我想你可以考虑这样的事情......

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米的结果,这个解决方案不会很好地扩展。而是使用变量作为排名位。