代码之家  ›  专栏  ›  技术社区  ›  Alpha2k

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

  •  0
  • Alpha2k  · 技术社区  · 7 年前

    我有一张如下表:

     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。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Bohemian    7 年前

    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)
    
    推荐文章