2010-06-07 173 views
0

假设我有一个非常有大的带有时间戳字段的MySQL表。所以我想过滤掉一些结果不要有太多的行,因为我要打印它们。根据时间戳间隔过滤MySQL查询结果

假设时间戳随着行数的增加而增加,它们就像每隔一分钟的平均值(不一定每分钟一次,例如:2010-06-07 03::14,2010-06-07 03::23,2010-06-07 03: :01,03 2010-06-07::51,2010-06-07 03::21 ...)

正如我前面提到我想筛选出一些记录,我没有特定的规则来做到这一点,但我正在考虑按照时间戳间隔过滤出行。在实现过滤之后,我想要一个结果集,它在时间戳之间有一定的分钟数,平均为(例如:2010-06-07 03::14,2010-06-07 03::23,2010-06-07 03::01,2010-06-07 03::51,2010-06-07 03::21 ......)

最后但并非最不重要的是,操作应该而不是需要不可思议的时间量,我需要这个功能几乎快速作为一个正常的选择操作。

你有什么建议吗?

回答

1

我没能拿出一个查询,将做到这一点从我的头顶,但这里是我的想法是:

  1. 如果您在一个有很多条目分钟,找出一种方法来折叠结果,以便在给定分钟内有最多1条记录(DISTINCTDATE_FORMAT也许?)。

  2. 限制的结果通过模的分值,这样的事情(如果你想从每10分钟一个条目)数量:

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

+0

我想这些是唯一可能的方法。 – pars 2010-06-11 00:20:07

1

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

SELECT * FROM table 
WHERE RAND() < 0.001 

如果你想重复的结果(用于测试),你可以使用一个种子参数,以强制函数总是返回相同的一组数字。