Как я считаю количество записей в таблице 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-минутными блоками?
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-минутного периода, обратно в удобочитаемую форму г / м / д. / ч / м. (Если вам нужно было указать местное время в безумном часовом поясе, не выровненном по четверти часа, вам понадобится смещение взлома.)
Как насчет получения ЦЕЛОГО ЧАСА (DateField) * 60 + МИНУТ (DateField)) / YourInterval.
Таким образом, независимо от вашего интервала, включив час * 60 минут, вы сохраните его последовательно в течение заданного дня, и вы будете иметь дело не только с 15 минутами, сгруппированными в час, а каждые 15 минут своего СВОЕГО часа. ... Добавьте этот столбец в свою группу по предложению, которое вы можете сделать по его порядковому номеру.
Чтобы заставить вас задуматься, вот альтернатива решению 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