2009-02-02 86 views
9

我有一个包含数据每分钟记录表,所以我必须为每分钟一列。当返回数据进行处理时,在过去的6小时内需要这种精确度,但在此之后,较低的精确度就足够了。每5分钟一班。如何获取MySQL中的每一行?

我可以将所有数据返回到一个数组,然后删除所有,但每5元,但需要用MySQL来返回,然后读入数组首先数据 - 相当多的数据。

我怎么能在MySQL回报每一位第n行?我已阅读提示使用的PrimaryKey%this博客中5 = 0,其中PrimaryKey的是AUTO_INCREMENT但这

一)不使用索引 B)将只返回其中5和缺失的情况下是可分的PrimaryKey值,实际上可能不是每第5行

这可以在SQL查询中完成,还是需要循环使用游标结果集中的行?

我在PHP中使用MySQLi连接到数据库。

回答

3

时间戳列表每5分钟:

SELECT 
    MIN(logtimestamp) AS first_of_five_minutes 
FROM tLog 
GROUP BY 
    DATE(logtimestamp), 
    HOUR(logtimestamp), 
    MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5) 

现在,你可以用这个作为一个子选择由获得请求的日志条目将logtimestamps加到first_of_five_minutes上。当然,更多的WHERE -clauses有让您得到“正确”的时间戳进行内部和外部复制。

此外,请注意,这将返回第一个时间戳,每隔五分钟的时间间隔,wheras解决方案直接使用minutes%5 = 0只返回logentries这实际上是对的倍数:05,如果你有记录日志或类似的延迟,并可能会失败。

0

完全未经测试,但是这可能工作

SELECT Row, col_a 
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1 
WHERE Row%5 = 0; 
+0

不返回任何东西。 – DavidM 2009-02-02 11:00:55

+0

它是否返回没有where子句的任何东西?对不起,但我目前无法访问mysql,所以无法在我的末尾进行测试:( – Learning 2009-02-02 11:04:07