从日期时间起24小时分组

时间:2019-04-15 17:35:56

标签: google-bigquery

即使某个小时内没有事件,我也需要每小时进行一次事件计数。 如何在不创建临时表的情况下将这些小时数包含在组中?我检查了所有类似的帖子,但找不到答案。 可以说

select extract(hour from time(date_time)) as Hour, count(*)
from table_A
group by hour
order by hour

这让我只计算发生事件的小时数。
我正在使用Bigquery

谢谢

2 个答案:

答案 0 :(得分:2)

使用generate_array()unnest()来生成小时数:

select h, count(a.date_time)
from unnest(generate_array(0, 23)) h left join
     table_A a
     on extract(hour from time(a.date_time)) = h
group by h
order by h;

这比Postgres数据库支持的generate_series()稍微复杂些,但是它以简单的方式完成了工作。

答案 1 :(得分:0)

您的问题已用SQL标记。对于SQL解决方案,我需要动态生成24小时并交叉连接。例如:

;WITH twenty_four_hour_range AS 
(
SELECT
       1 AS _hour
      UNION ALL
      SELECT
       1 + _hour
      FROM    twenty_four_hour_range
      WHERE 1 + _hour <=24
)
select _hour, COUNT(*)
from table_A CROSS JOIN 
twenty_four_hour_range
group by twenty_four_hour_range._hour
order by 1