我有一张如下表:
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。
那么什么才是最好的, 继续研究如何构建查询或创建包含计划事件的表?
MySQL minute() 函数是解决方案的基础-它返回 分钟 部分论点, eg :
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)