题
我有一个包含数据记录每分钟的表,所以我为每分钟一排。当返回用于处理的数据,需要这样的精度为最后6个小时,但在此之后,精度较低水平是足够的,例如每5分钟
我都可以将数据返回到一个数组,然后除去所有但每第五元件但需要的所有数据由MySQL返回,然后读入到阵列的第一 - 相当大量的数据
我怎样才能返回MySQL的每一个第n行?我已阅读这的博客文章,其建议使用的PrimaryKey%5 = 0,其中的PrimaryKey是AUTO_INCREMENT但这
a)不使用索引 B)将只返回的PrimaryKey值其可通过5和缺失的情况下整除,可能实际上不是每第5行
这能仅仅SQL查询中完成的,还是会需要按行通过使用游标结果集循环行?
我使用库MySQLi 在PHP连接到DB。
解决方案
时间戳的列表,每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
子句有让您得到“正确”的时间戳进行内部和外部推广。
此外,请注意,这将返回第一个时间戳,每隔五分钟的时间间隔,wheras解决方案直接使用minutes%5 = 0
只返回logentries这实际上是对的倍数:05,如果你有记录日志或类似的延迟,并可能会失败
其他提示
完全未经测试,但是这可能工作
SELECT Row, col_a
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1
WHERE Row%5 = 0;
不隶属于 StackOverflow