我有一个包含数据记录每分钟的表,所以我为每分钟一排。当返回用于处理的数据,需要这样的精度为最后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)

现在,你可以将它作为一个子选择通过参加logtimestampsfirst_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; 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top