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
答案 0 :(得分:0)
我对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