Подтвердить что ты не робот

Групповые данные MySQL в произвольно взвешенные ведра

Как подсчитать количество записей в таблице 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-минутные ведра?

4b9b3361

Ответ 1

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. (Если вам нужно иметь местное время в сумасшедшем часовом поясе, не зависящем от четверть часа, вам понадобится смещение взлома.)

Ответ 2

Как получить INTEGER (HOUR (DateField) * 60 + MINUTES (DateField))/YourInterval.

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

Ответ 3

Просто чтобы вы подумали, вот альтернатива решению 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