mysql group by 时间段_mysql – SELECT/GROUP BY – 时间段(10秒,30秒等)

我有一个表(MySQL),每n秒捕获样本。该表有许多列,但对此重要的是两个:时间戳(类型TIMESTAMP)和计数(类型INT)。

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

以下是数据示例:

+---------------------+-----------------+

| time_stamp | count |

+---------------------+-----------------+

| 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 | # This is the sum for the 00 - 30 seconds range

| 2010-06-15 23:35:30 | 7544 | # This is the sum for the 30 - 60 seconds range

| 2010-06-17 10:39:35 | 450 | # This is the sum for the 30 - 60 seconds range

+---------------------+-----------------+

我使用GROUP BY来收集这些数字的第二个,或分钟,但我似乎无法找出语法获得子分钟或范围的秒GROUP BY命令正常工作。

我大多要使用这个查询从这个表虹吸数据到另一个表。

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用左连接(left join)来解决这个问题。假设你有一个名为 `table` 的表,其中包含一个日期列 `date` 和一个数据量列 `count`。以下是一个示例查询: ``` SELECT date, IFNULL(count, 0) AS count FROM ( SELECT DATE('2021-01-01') + INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS date FROM ( SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS a CROSS JOIN ( SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS b CROSS JOIN ( SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS c WHERE DATE('2021-01-01') + INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY <= '2021-01-31' ) AS dates LEFT JOIN ( SELECT DATE(date) AS date, COUNT(*) AS count FROM table WHERE date BETWEEN '2021-01-01' AND '2021-01-31' GROUP BY DATE(date) ) AS counts ON dates.date = counts.date ORDER BY date; ``` 该查询将生成一个包含给定日期范围内所有日期的日期表(使用 MySQL 的日期算术运算符)。然后,它将左连接此表和每个日期的计数数据(使用 `IFNULL` 函数将缺少的计数值替换为零)。 注意,这个查询假设你使用的是 MySQL 数据库,并且日期列是一个 `DATE` 类型的列。如果你使用的是不同的数据库或日期列具有不同的格式,请根据情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值