【发布时间】:2012-05-25 10:06:02
【问题描述】:
我在数据库中有一个按时间存储日志数据的表。一天之内,数据库中可能有一百万行。时间没有任何固定的间隔。它有几个索引,包括时间。我想要做的是构建一个查询,该查询将返回一组行,每个时间间隔一行。例如,我可以执行查询以在一天内每 15 分钟返回 1 行。这将返回 24*60=96 行。返回的每一行实际上是请求间隔之前数据库中最近的行(因为数据库中的数据不等于请求的间隔)。
我不知道该怎么做。我不能只为一组特定的索引和时间间隔查询所有行,因为它会将超过 1 GB 的数据加载到内存中,这太慢了。有没有任何有效的方法可以使用 SQL 来做到这一点。我正在使用 MySQL 数据库。我愿意更改表索引/等...
TIME
11:58
12:03
12:07
12:09
12:22
12:27
12:33
12:38
12:43
12:49
12:55
如果我想查询这个从 12:00 到 1:00 的 15 分钟间隔,我会回复:
11:58 (nearest 12:00)
12:09 (nearest 12:15)
12:27 (nearest 12:30)
12:43 (nearest 12:45)
12:55 (nearest 1:00)
如果它更容易,我还可以将时间存储为数字(即自 1970 年以来的毫秒)。在上述查询中,这将是 900000 毫秒的间隔。
【问题讨论】:
-
如果在给定的时间间隔内有多于一行,应该使用哪一行?还是应该是行的某种组合?
-
是否需要每个区间出现?如果没有记录怎么办?如果一个记录最接近两个不同的时间间隔(即 11:58、12:27、01:14 将 12:14 最接近 12:15、12:30 和 12:45
-
如果该区间内没有记录,则该区间内没有记录是可以的。