Группируйте данные MySQL в произвольно заданные временные интервалы - PullRequest
20 голосов
/ 05 апреля 2010

Как подсчитать количество записей в таблице MySQL на основе столбца метки времени в единицу времени, где единица времени является произвольной?

В частности, я хочу подсчитать, сколько временных меток записи попало в 15-минутные интервалы за указанный интервал. Я понимаю, как сделать это с интервалом в 1 секунду, 1 минуту, 1 час, 1 день и т. Д., Используя функции даты MySQL, например,

SELECT YEAR(datefield) Y, MONTH(datefield) M, DAY(datefield) D, COUNT(*) Cnt FROM mytable GROUP BY YEAR(datefield), MONTH(datefield), DAY(datefield)

но как я могу сгруппировать по 15-минутным сегментам?

Ответы [ 3 ]

23 голосов
/ 05 апреля 2010
GROUP BY
    YEAR(datefield),
    MONTH(datefield),
    DAY(datefield),
    HOUR(datefield),
    FLOOR(MINUTE(datefield)/15)

Вы могли бы просто сказать:

SELECT FLOOR(UNIX_TIMESTAMP(datefield)/900) AS t, COUNT(*) AS cnt
FROM mytable
GROUP BY t

с приложением, отвечающим за форматирование метки времени для каждого 15-минутного периода, обратно в удобочитаемое значение y / m / d / h / m. (Если вам нужно иметь местное время в сумасшедшем часовом поясе, выровненном не на четверть часа, вам понадобится смещение хака.)

4 голосов
/ 05 апреля 2010

Как насчет получения целого числа (ЧАС (DateField) * 60 + МИНУТ (DateField)) / YourInterval.

Таким образом, независимо от того, какой у вас интервал, включая час * 60 минут будут сохранять его последовательно в течение данного дня, и вы будете иметь дело не с 15 минутами, сгруппированными в час, а каждые 15 минут своего СОБСТВЕННОГО часа ... Добавьте этот столбец в вашу группу по выражению, которое вы можете сделать по его порядковому номеру.

3 голосов
/ 05 апреля 2010

Просто чтобы заставить вас задуматься, вот альтернатива FLOOR(MINUTE(datefield)/15) решению:

GROUP BY CASE
WHEN MINUTES(datetime) BETWEEN 0 AND 14 THEN 0
WHEN MINUTES(datetime) BETWEEN 15 AND 29 THEN 1
WHEN MINUTES(datetime) BETWEEN 30 AND 44 THEN 2
WHEN MINUTES(datetime) BETWEEN 45 AND 59 THEN 3
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...