开发者社区> 问答> 正文

SELECT / GROUP BY-时间段(10秒,30秒等)?mysql

我有一个表格(MySQL),每n秒捕获一次样本。该表有很多列,但与此相关的只有两列:时间戳(TIMESTAMP类型)和计数(INT类型)。

我想做的是获取一定时间范围内count列的总和和平均值。例如,我每2秒记录一次样本,但是我希望所有样本的计数列的总和在10秒或30秒的窗口中。

这是数据示例:

  • --------------------- + ----------------- + | time_stamp | 数|
  • --------------------- + ----------------- + | 2010-06-15 23:35:28 | 1 | | 2010-06-15 23:35:30 | 1 | | 2010-06-15 23:35:30 | 1 | | 2010-06-15 23:35:30 | 942 | | 2010-06-15 23:35:30 | 180 | | 2010-06-15 23:35:30 | 4 | | 2010-06-15 23:35:30 | 52 | | 2010-06-15 23:35:30 | 12 | | 2010-06-15 23:35:30 | 1 | | 2010-06-15 23:35:30 | 1 | | 2010-06-15 23:35:33 | 1468 | | 2010-06-15 23:35:33 | 247 | | 2010-06-15 23:35:33 | 1 | | 2010-06-15 23:35:33 | 81 | | 2010-06-15 23:35:33 | 16 | | 2010-06-15 23:35:35 | 1828 | | 2010-06-15 23:35:35 | 214 | | 2010-06-15 23:35:35 | 75 | | 2010-06-15 23:35:35 | 8 | | 2010-06-15 23:35:37 | 1799 | | 2010-06-15 23:35:37 | 24 | | 2010-06-15 23:35:37 | 11 | | 2010-06-15 23:35:37 | 2 | | 2010-06-15 23:35:40 | 575 | | 2010-06-15 23:35:40 | 1 | | 2010-06-17 10:39:35 | 2 | | 2010-06-17 10:39:35 | 2 | | 2010-06-17 10:39:35 | 1 | | 2010-06-17 10:39:35 | 2 | | 2010-06-17 10:39:35 | 1 | | 2010-06-17 10:39:40 | 35 | | 2010-06-17 10:39:40 | 19 | | 2010-06-17 10:39:40 | 37 | | 2010-06-17 10:39:42 | 64 | | 2010-06-17 10:39:42 | 3 | | 2010-06-17 10:39:42 | 31 | | 2010-06-17 10:39:42 | 7 | | 2010-06-17 10:39:42 | 246 |
  • --------------------- + ----------------- + 我想要的输出(基于上面的数据)应如下所示:

  • --------------------- + ----------------- + | 2010-06-15 23:35:00 | 1 | #这是00-30秒范围内的总和 | 2010-06-15 23:35:30 | 7544 | #这是30到60秒范围内的总和 | 2010-06-17 10:39:35 | 450 | #这是30到60秒范围内的总和

  • --------------------- + ----------------- + 我已经使用GROUP BY来按秒或按分钟来收集这些数字,但是我似乎无法弄清楚语法来获得GROUP BY命令的不到分钟或几秒的范围才能正常工作。

我将主要使用此查询将数据从该表虹吸到另一个表。

谢谢!

展开
收起
保持可爱mmm 2020-05-16 21:00:01 434 0
1 条回答
写回答
取消 提交回答
  • GROUP BY UNIX_TIMESTAMP(time_stamp) DIV 30

    或者说由于某种原因,您希望将它们以20秒的间隔进行分组,以此类推DIV 20。要更改GROUP BY值之间的边界,可以使用

    GROUP BY (UNIX_TIMESTAMP(time_stamp) + r) DIV 30

    这里r的文字非负整数小于30。因此

    GROUP BY (UNIX_TIMESTAMP(time_stamp) + 5) DIV 30

    应该给您在hh:mm:05和hh:mm:35之间以及hh:mm:35和hh:mm + 1:05之间的总和。来源:stack overflow

    2020-05-16 21:56:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于云原生数据仓库AnalyticDB PG的最佳实践 立即下载
新氧云原生全栈数仓最佳实践 立即下载
离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进 立即下载

相关镜像