每分钟给出日期,每两个提取一次

时间:2018-05-01 22:15:38

标签: mysql date datetime timestamp

我有一张如下表格:

 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不是订购的,它们可以在当前分钟的任何地方批量生产#34;。

从这张表中我想每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。

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

1 个答案:

答案 0 :(得分:1)

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

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)