在数据库中以 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
我们有一个大数据库,可以记录履带车辆的位置。所以,每一秒,我们都有成千上万的职位。 目的是过滤 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