我有一张如下表格:
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。
那么什么是最好的,继续研究如何构建查询或创建包含预定事件的表?
答案 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)