postgresql - 将数据聚合到 30 分钟间隔
问题描述
A 有一个表格,其中每行相隔 300 秒(或 5 分钟)。我需要每隔一小时和半小时聚合一次数据,聚合之前的所有内容,包括一小时或半小时。
我试过这段代码:
SELECT
to_timestamp(floor(a / 1800 )) *
1800)
AT TIME ZONE 'UTC' as interval_alias, SUM(b) as b_sum
FROM TABLE_NAME GROUP BY interval_alias
...并且它汇总了每小时和半小时的数据,但它汇总了每小时和半小时后的值。
该表如下所示:
a | b
-------------------------
1533045600 | 3
1533045900 | 5
1533046200 | 6
1533046500 | 3
1533046800 | 5
1533047100 | 2
1533047400 | 3
1533047700 | 8
1533048000 | 5
1533048300 | 5
1533048600 | 6
上面代码的实际结果是:
a | b
-------------------------
1533045600 | 24
1533047400 | 27
所需的输出是:
a | b
-------------------------
1533045600 | 3
1533047400 | 24
解决方案
我对 interval_alias 使用了更简单的计算,并且使用 GROUP BY,您只能选择聚合或属于 GROUP BY 的列。(SELECT *
您在问题中发布的内容看起来不正确......)
SELECT
FLOOR(a/1800)*1800 AS interval_alias,
SUM(b) AS sum_b
FROM TABLE_NAME
GROUP BY interval_alias
请参阅SQL Fiddle上的示例代码
更新:这接近您想要的输出,但将包括第三个结果,因为您的测试数据跨越了半个多小时。
SELECT
FLOOR(a/1800)*1800 + SIGN(a%1800)*1800 AS interval_alias,
SUM(b) AS sum_b
FROM TABLE_NAME
GROUP BY interval_alias
ORDER BY interval_alias
推荐阅读
- javascript - 使用扩展运算符使用反应挂钩更新地图函数内部的状态
- angular - mat 手风琴不适用于组件选择器
- javascript - setTimeout 调用堆栈问题
- swift - 半径角和按钮
- python-3.x - 避免 twitter 询问电话或电子邮件验证 selenium
- pyspark - ncr 与 pyspark nc3 的组合
- javascript - 在javascript中访问函数的变量?
- android - 在平板电脑或横向更改 BottomSheet 设计
- javascript - Node js - twitter 高级搜索 API - 搜索 url
- python - 在一组值上优化函数