группировка по 24 часа от даты

0

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

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

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

Спасибо

  • 1
    Добро пожаловать в переполнение стека! Если вы используете BigQuery, не помечайте 3 других СУБД, пожалуйста. Это на самом деле запутает волонтеров, от которых вы просите помощи, и поэтому у вас меньше шансов получить ответ. Каждая СУБД имеет свой синтаксис, и если мы не знаем точно, какой вы используете, мы не сможем предоставить правильное решение. (Кроме того, многие из нас не свободно владеют каждой версией SQL, и вместо этого, возможно, только 1 или 2. Если вы пометите RDBMS, которую мы не знаем, мы, вероятно, проигнорируем этот вопрос, так как считаем, что не будем возможность помочь со стороной {MySQL / SQL Server / etc}.)
  • 0
    Ладно спасибо понимаю
Теги:
google-bigquery

2 ответа

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
0

Используйте 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, но он выполняет свою работу простым способом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню