группировка по 24 часа от даты - PullRequest
0 голосов
/ 15 апреля 2019

Мне нужен подсчет событий по часам, даже если в какой-то час событий нет. Как я могу включить эти часы в группу, не создавая временную таблицу? Я проверил все подобные сообщения, но не смог найти ответ. Скажем

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

это заставляет меня рассчитывать только на часы, где есть событие.
Я использую Bigquery

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Используйте 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;

Это немного сложнее, чем generate_series(), поддерживаемый базами данных Postgres, но это делает работу простым способом.

0 голосов
/ 15 апреля 2019

Ваш вопрос помечен с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...