Google bigquery 从日期到时间按24小时分组

Google bigquery 从日期到时间按24小时分组,google-bigquery,Google Bigquery,我需要每小时统计事件,即使在某个小时内没有事件。 在不创建临时表的情况下,如何将这些小时包括在组中?我查看了所有类似的帖子,但找不到答案。 比方说 select extract(hour from time(date_time)) as Hour, count(*) from table_A group by hour order by hour 这让我只在有活动的地方数小时。 我使用的是Bigquery 谢谢您的问题带有SQL标记。对于SQL解决方案,我会动态生成24小时并交叉连接到该解决方

我需要每小时统计事件,即使在某个小时内没有事件。 在不创建临时表的情况下,如何将这些小时包括在组中?我查看了所有类似的帖子,但找不到答案。 比方说

select extract(hour from time(date_time)) as Hour, count(*)
from table_A
group by hour
order by hour
这让我只在有活动的地方数小时。 我使用的是Bigquery


谢谢

您的问题带有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

您的问题已标记为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
使用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_系列稍微复杂一些,但它以一种简单的方式完成这项工作。

使用generate_array和Unest生成小时数:

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_系列稍微复杂一些,但它以一种简单的方式完成这项工作。

欢迎使用Stack Overflow!如果您使用的是BigQuery,请不要标记其他3个RDBMS。事实上,这会让你向更多人寻求帮助的志愿者感到困惑,因此你不太可能得到答案。每个RDBMS都有不同的语法,如果我们不知道您使用的是哪种,那么我们就无法提供正确的解决方案。此外,我们中的许多人并不精通SQL的每一个版本,相反,可能只有1或2个版本。如果您标记了一个我们不知道的RDBMS,那么我们可能会忽略这个问题,因为我们认为我们无法在{MySQL/SQL Server/etc}方面提供帮助。好的,谢谢,我理解,欢迎使用堆栈溢出!如果您使用的是BigQuery,请不要标记其他3个RDBMS。事实上,这会让你向更多人寻求帮助的志愿者感到困惑,因此你不太可能得到答案。每个RDBMS都有不同的语法,如果我们不知道您使用的是哪种,那么我们就无法提供正确的解决方案。此外,我们中的许多人并不精通SQL的每一个版本,相反,可能只有1或2个版本。如果您标记了一个我们不知道的RDBMS,那么我们可能会忽略这个问题,因为我们认为我们无法在{MySQL/SQL Server/etc}方面提供帮助。好的,谢谢,我理解