如何在MySQL中获取每n行?

Dav*_*idM 9 php mysql mysqli

我有一个表,其中包含每分钟记录的数据,所以我每分钟都有一行.当返回数据进行处理时,过去6小时需要这种精度,但在此之后,较低的准确度就足够了,例如每5分钟.

我可以将所有数据返回到一个数组中,然后删除除第5个元素之外的所有数据,但这需要MySQL返回所有数据,然后首先读入数组 - 相当多的数据.

如何返回MySQL中的每一行?我已经阅读了这篇博文,建议使用primaryKey%5 = 0,其中primaryKey是auto_increment但是这个

a)不使用索引b)只返回可被5整除的primaryKey值,在删除的情况下,实际上可能不是每隔5行

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

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

Dav*_*itt 3

每 5 分钟的时间戳列表:

SELECT
  MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
  DATE(logtimestamp),
  HOUR(logtimestamp),
  MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用它作为子选择,通过加入logtimestamps到 来获取请求的日志条目first_of_five_minutes。当然,WHERE必须在内部和外部复制额外的 - 子句,以便获得“正确”的时间戳。

另请注意,这会在每五分钟间隔返回第一个时间戳,而直接使用minutes%5 = 0仅返回实际上是 :05 倍数的日志条目的解决方案,如果您在记录日志或类似情况时出现延迟,则可能会失败。