在数据库中每5分钟显示一次时间

时间:2019-06-11 08:34:10

标签: mysql sql time intervals

我们有一个大型数据库,可以记录被跟踪车辆的位置。因此,每一秒钟,我们都有成千上万的职位。 目的是过滤SQL请求,因为我们有太多数据。如果我做一个简单的“从仓位选择时间”,我会得到很多仓位时间。但是我对所有这些都不感兴趣。 所以我的想法是创建一个间隔。我希望数据库每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工作台6.3版。

1 个答案:

答案 0 :(得分:0)

假设time的类型为DATETIME或TIMESTAMP,并且您只想要时间等于0的秒数和时间等于5的倍数的记录,则可以尝试以下操作:< / p>

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

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

为了解决此问题,您可以尝试以下操作:

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