如何在某个时间段内进行 GROUP BY?

Posted

技术标签:

【中文标题】如何在某个时间段内进行 GROUP BY?【英文标题】:How can I make a GROUP BY on a time period? 【发布时间】:2011-05-27 19:29:35 【问题描述】:

我有带有时间戳、温度和湿度的表格。我想在湿度高于 80% 的时期内获得平均温度。类似的东西

选择 最小 (DTM), 最大 (DTM), 平均(TMP) 分组依据(HMD>80)

这可能吗?

谢谢

雨果

我需要定义从湿度上升到 80% 以上开始到低于 80% 结束的时间段。然后我必须得到 BEGIN 时间戳 END 时间戳和平均温度

【问题讨论】:

你想按什么分组?您应该有不同的具体值来分组,例如时间戳的日期。 所以您正在寻找在整个范围内湿度保持在 80% 以上的一个或多个连续时间戳范围? 【参考方案1】:

在 Group BY 子句中,您需要使用 CASE 而不是 WHERE :

SELECT MIN (DTM), MAX (DTM), AVG(TMP) GROUP BY (CASE WHEN HMD>80 THEN HMD END);

【讨论】:

【参考方案2】:

更像:

SELECT MIN (DTM), MAX (DTM), AVG(TMP) FROM tbl WHERE HMD>80 GROUP BY location

不过,您的主要问题是提取有效范围,因为 HMD > 80 将返回所有符合条件的行,无论它们是否处于同一时期。

如果您确实需要事先提取有效范围,您可能需要访问此线程:

Get list with start and end values from table of datetimes

【讨论】:

location 是从哪里来的? 它无处不在。他的查询无论如何都是无效的,因为它没有from 子句。但我假设他正在尝试平均每个城市/区域/位置/某事。

以上是关于如何在某个时间段内进行 GROUP BY?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xslt 元素上应用 group by

hive distribute by 和group by 的区别

group by分组后对组内数据进行排序

如何通过 group_by 中的 group-number 对数据表进行编号/标记?

使用 group_by() 计算对象内第一次测量的时间间隔

MySQL 查询 GROUP BY 日/月/年