【问题标题】:Given dates every minute, extract every two每分钟给定日期,每两个提取一次
【发布时间】:2018-05-01 22:15:37
【问题描述】:

我有一张如下表:

 ID     Date                    Value
 1      2018-04-29 14:51:01     0.1
 2      2018-04-29 14:51:01     0.21
 3      2018-04-29 14:51:01     0.123
 2      2018-04-29 14:52:01     5.7
 3      2018-04-29 14:52:01     1.2
 1      2018-04-29 14:52:01     5.9
 1      2018-04-29 14:53:01     1.23
 3      2018-04-29 14:53:01     7.9
 2      2018-04-29 14:53:01     1.68
 1      2018-04-29 14:54:01     0.01
 2      2018-04-29 14:54:01     0.068
 3      2018-04-29 14:54:01     0.2686
 2      2018-04-29 14:55:01     2.3
 3      2018-04-29 14:55:01     3.4
 1      2018-04-29 14:55:01     5.7
 1      2018-04-29 14:56:01     102.357
 3      2018-04-29 14:56:01     12.36
 2      2018-04-29 14:56:01     123.47
 1      2018-04-29 14:57:01     12379.42
 2      2018-04-29 14:57:01     1230.1
 3      2018-04-29 14:57:01     35.235
 2      2018-04-29 14:58:01     1237.3
 3      2018-04-29 14:58:01     4.68
 1      2018-04-29 14:58:01     123.578
 1      2018-04-29 14:59:01     1233.57
 3      2018-04-29 14:59:01     23.457
 2      2018-04-29 14:59:01     0.213

每分钟插入一次 ID 及其日期(在插入当前时间戳上)。一些 ID 可以在表格中出现一段时间,并且它们可以稍后在不同的时间重新出现。这些 id 没有顺序,它们可以在当前分钟“批次”的任何地方。

我想从这个表中每 2 分钟提取一次值,所以输出应该如下:

 ID     Date                    Value
 1      2018-04-29 14:51:01     0.1
 2      2018-04-29 14:51:01     0.21
 3      2018-04-29 14:51:01     0.123
 1      2018-04-29 14:53:01     1.23
 3      2018-04-29 14:53:01     7.9
 2      2018-04-29 14:53:01     1.68
 2      2018-04-29 14:55:01     2.3
 3      2018-04-29 14:55:01     3.4
 1      2018-04-29 14:55:01     5.7
 1      2018-04-29 14:57:01     12379.42
 2      2018-04-29 14:57:01     1230.1
 3      2018-04-29 14:57:01     35.235

PD:我不能在这个查询中使用变量,但我可以根据需要创建函数/过程。

就我对 MySQL 的了解而言……对我来说最简单的事情是创建另一个表,其中包含每两分钟运行一次的预定事件,并提取当前值并将它们插入到新表中。

此查询的另一个问题是,如果仅由一个查询完成,则 1 分钟间隔表有数百万行具有许多不同的 ID。

那么什么是最好的,继续研究如何构建查询或创建带有预定事件的表?

【问题讨论】:

  • @Strawberry 我必须发布一半的服务器程序才能公开所有查询,我认为我的要求很清楚,只需每隔 X 分钟在插入表中提取数据分钟。
  • 如果您的 ID 在 14:52、14:54、14:56 等出现怎么办?它会完全从您的结果中排除吗?
  • @PM77-1 是的,删除这些不是问题,它们通常会在几分钟内出现,它们至少每分钟出现一天。
  • 好的。然后以任何你想要的方式使用modulo

标签: mysql date datetime timestamp


【解决方案1】:

MySQL minute() 函数是您解决方案的基础 - 它返回参数的 分钟 部分,eg

minute('2018-04-29 14:51:01') -- returns 51

对此使用 mod 划分:

select ...
from ...
where minute(date) % 2 = 1  -- only odd minutes

同样,每三分钟会是:

where minute(date) % 3 = 1 

等等。

如果你想更高级,你可以在你想要的小时后手工挑选分钟,例如所有的黄金时间:

where minute(date) in (2,3,5,7,11,13,17,23,29,31,37,41,43,47,53,59)

【讨论】:

  • 有时问题似乎很复杂,我什至想不出一个简单的操作员如何解决它,谢谢:)
猜你喜欢
  • 1970-01-01
  • 2019-11-04
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
相关资源
最近更新 更多