【问题标题】:Display times in 5 minute intervals in database在数据库中以 5 分钟为间隔显示时间
【发布时间】:2023-03-07 03:37:01
【问题描述】:

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

【问题讨论】:

  • 那么你的原始数据是什么?你的mysql是什么版本的?
  • 我没有看到00:01:05 成为00:10:07 的标准
  • 不,你不明白我想要什么。这只是一个例子,我只想显示这些位置的时间,但不是全部,仅以 5 分钟的间隔显示。所以 00:00:00 到 00:05:00 之间的所有时间都消失了,然后 00:05:00 到 00:10:00 消失了(只保留第 5 分钟的数据)
  • 我看到了其他相关主题,但不是我的情况。我的情况是当你有我展示的 STR_TO_DATE 时。我该怎么办?我是 SQL 新手,所以不太容易理解
  • 我同意,我不明白你想要什么。我仍然没有。

标签: mysql sql time intervals


【解决方案1】:

假设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

【讨论】:

  • 拥有大数据库需要很多时间,但我认为这是唯一的方法
  • 尝试在time 列上添加索引或对表进行分区。
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 2020-10-07
  • 2013-12-11
  • 2019-05-06
  • 2015-07-24
  • 1970-01-01
  • 2020-07-22
  • 2014-07-03
相关资源
最近更新 更多