Генерация MySQL почасовой разбивки на основе текущей отметки времени - PullRequest
2 голосов
/ 11 сентября 2011

Боюсь, это, наверное, очень неловко простой вопрос - но мой разум просто застрял в этот час.

У меня есть таблица, в которой хранится количество действий, выполненных разными людьми, ивремя, в которое это произошло.

Я хочу создать отчет, который принимает имя человека в качестве параметра и показывает количество действий в час для этого человека в течение каждого из предыдущих 24 часов, начиная с текущей отметки времени(now()).

Прямо сейчас,

SELECT hour(TimeStamp), activities FROM tbl1 
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR)  AND Name = ? 
GROUP BY hour(timestamp)

возвращается ко мне только в те часы, когда какая-либо активность присутствовала.Тем не менее, я хочу полный 24-часовой анализ с нулем, когда не было активности.

т.е. я получаю

Hour | No. of Activities
1    | 34
4    | 22
9    | 86

, но я хочу

Hour | No. of Activities
1    | 34
2    | 0
3    | 0
4    | 22
5    | 0
... etc.

Как мне это сделать?

(порядок часов в примере не имеет значения)

1 Ответ

5 голосов
/ 11 сентября 2011

Вы можете создать hourly таблицу и сделать LEFT JOIN

create table hourly
(
  /* hour is not a reserved keyword */
  hour smallint(2) not null default 0
);

insert into hourly values (0),(1).... until 24

SELECT 
  hourly.hour, 
  COALESCE(COUNT(activities),0) AS "No of Activities"
FROM hourly
LEFT JOIN tbl1 ON hourly.hour=hour(tbl1.TimeStamp)
WHERE 
  tbl1.timestamp>=DATE_SUB(NOW(), INTERVAL 24 HOUR) AND 
  tbl1.Name=? 
GROUP BY hourly.hour
ORDER BY hourly.hour;
...