我们有一个大型数据库,可以记录被跟踪车辆的位置。因此,每一秒钟,我们都有成千上万的职位。 目的是过滤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版。
答案 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