根据时间戳的间隔过滤MySQL查询结果

时间:2010-06-07 02:05:56

标签: mysql performance

假设我有一个带有时间戳字段的 MySQL表。所以我想过滤掉一些没有太多行的结果,因为我打算打印它们。

假设时间戳随着行数的增加而增加,它们就像平均每分钟一样(不一定每分钟一次,例如:2010-06-07 03: 55 :14,2010-06-07 03: 56 : 23,2010-05-07 03: 57 :01,2010-05-07 03: 57 :51,2010-05-06 03: 59 < / strong>:21 ...)

正如我之前提到的,我想过滤掉一些记录,我没有具体的规则来做到这一点,但我想根据时间戳间隔筛选出行。在我实现过滤后,我想要一个结果集,其中时间戳平均 之间有一定的分钟数(例如:2010-06-07 03: 20 :14,2010-05-07 03: 29 :23,2010-05-07 03: 38 :01,2010-05-07 03: 49 :51,2010-05-06 03: 59 :21 ......)

最后但并非最不重要的是,操作需要花费大量时间,我需要此功能几乎快于正常的选择操作。

你有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我无法想出一个能够做到这一点的问题,但这就是我的想法:

  1. 如果您在一分钟内有大量条目,请找出折叠结果的方法,以便在任何给定的分钟内有最多1个条目(DISTINCTDATE_FORMAT ?)。

  2. 通过在分钟值上使用模数限制结果数量,如下所示(如果您希望每10分钟输入一次):

  3. WHERE MOD(MINUTE(tstamp_column, 10)) = 0

答案 1 :(得分:1)

如果你的目标是过滤记录,大概你真正想要的是一小部分记录,但不是前10或100.在这种情况下,哪个不是随机选择它们? MySQL RAND()函数将返回浮点数n,使得0 <= n <1。 1.0。将您想要的百分比转换为浮点数,并像这样使用它:

SELECT * FROM table
WHERE RAND() < 0.001

如果想要可重复的结果(用于测试),可以使用种子参数强制函数始终返回相同的数字集。