在数据库中以 5 分钟为间隔显示时间

Display times in 5 minute intervals in database

我们有一个大数据库,可以记录履带车辆的位置。所以,每一秒,我们都有成千上万的职位。 目的是过滤 SQL 请求,因为我们的数据太多了。如果我做一个简单的 "select time from positions",我会得到很多位置时间。但我对所有这些都不感兴趣。 所以我的想法是创建一个间隔。我想让数据库每5分钟给我一次位置时间

数据库使用STR_TO_DATE函数获取位置时间。

我的数据是这样的:

2019-06-05 00:00:00
2019-06-05 00:01:00
2019-06-05 00:01:00
2019-06-05 00:02:00

我想要这个:

2019-06-05 00:00:00
2019-06-05 00:05:00
2019-06-05 00:10:00
2019-06-05 00:15:00

如您所见,位置时间“01”“02”..已经消失。因为我不想要他们。我想要 00:05:00 中的位置时间,然后是 00:10:00 中的位置时间,但我不想要这些间隔之间的位置时间。

select 
    distinct time 
from 
    positions 
where 
    time>STR_TO_DATE('05/06/2019 00:00', '%d/%m/%Y %H:%i')
    and time<STR_TO_DATE('06/06/2019 00:00', '%d/%m/%Y %H:%i')
limit 1000;

请问我该怎么做?我怎样才能改变我的代码?

我正在使用 Mysql workbench 6.3 版。

假设time的类型是DATETIME或TIMESTAMP,你只想要秒数为0且分钟数为5的倍数的记录,你可以试试下面的方法:

WHERE MOD(UNIX_TIMESTAMP(time), 300) = 0

我不确定这是否正确,因为我不知道此函数在闰秒方面的表现。我无法在我的环境中对此进行测试。

为了解决这个问题,您可以试试这个:

WHERE MOD(EXTRACT(MINUTE FROM time), 5) = 0
  AND EXTRACT(SECOND FROM time) = 0         -- if relevant
  AND EXTRACT(MICROSECOND FROM time) = 0