2014-01-03 2 views
0

Как я могу группировать записи таблицы Тест по временному интервалу, начинающийся каждый день в 19:00 и заканчивающийся на следующий день в 18:59?Mysql Group Через 24-часовые интервалы

Таблица: Тест

id creation_date name 
1 2014-01-01  17:52:27 a 
2 2014-01-01  18:50:00 b 
3 2014-01-01  19:00:00 c 
4 2014-01-03  18:59:00 e 
5 2014-01-03  12:00:00 f 

Желаемый результат:

Interval         Number of Occurrences 
2013-31-31 19:00:00 - 2014-01-01 18:59:59 2 
2014-01-01 19:00:00 - 2014-01-02 18:59:59 1 
2014-01-02 19:00:00 - 2014-01-03 18:59:59 1 
2014-01-03 19:00:00 - 2014-01-04 18:59:59 1 
+0

Название говорит каждые 12 часа, но текст подразумевает интервалы 24 часа? –

+0

Отредактировано. Thks Digital Chris. –

ответ

5

Попробуйте это:

SELECT MIN(creation_date), MAX(creation_date), COUNT(*) AS Occurrences 
FROM test 
GROUP BY DATE(DATE_SUB(creation_date, INTERVAL 19 HOUR)) 

Работа демо: http://sqlfiddle.com/#!2/aa7583/6

Для части форматирования, используйте:

SELECT CONCAT(CONCAT(DATE(DATE_SUB(creation_date, INTERVAL 19 HOUR)),' 19:00:00') , ' - ' , CONCAT(DATE(DATE_ADD(creation_date, INTERVAL 5 HOUR)), ' 18:59:00')) AS Interval, COUNT(*) AS Occurrences 
FROM test 
GROUP BY DATE(DATE_SUB(creation_date, INTERVAL 19 HOUR)) 
+0

Thk вы для своих интересов. Ваш запрос не возвращает желаемый результат. Идея заключается не в том, чтобы каждый 19-й день переводить 19H (потому что они могут bt 13:13, 23:13, 13:00 и т. Д.), Но чтобы соответствовать каждой записи на интервале, который начинается в этот день в 19:00 и заканчивается на следующий день в 18:59. –

+0

@ user1391581 Я думаю, что запрос работает так, как ожидалось, пожалуйста, взгляните на рабочий запрос по адресу: http://sqlfiddle.com/#!2/aa7583/6 Я использовал данные примера, которые вы предоставили. Дайте мне знать, что не так с выходом, который показан на этом sqlfiddle (link). –

+0

Я видел это. Ожидаемое количество событий 2, 1, 1, 1. Не: 2, 1, 2. –

0

Как о чем-то вроде:

select count(distinct(q0.made_date)) from 
(
    select (date_sub(cast(concat(creation_date, " ", name) as datetime)), -19, HOUR) as made_date) 
) as q0 

(не пробовал это в скрипке, но идея для нормализации даты до полуночи, а затем группирования по датам)

+0

Thk вы для ваших интересов. Ваш запрос не возвращает желаемый результат. Идея заключается не в том, чтобы каждый 19-й день переводить 19H (потому что они могут bt 13:13, 23:13, 13:00 и т. Д.), Но чтобы соответствовать каждой записи на интервале, который начинается в этот день в 19:00 и заканчивается на следующий день в 18:59. –

+0

Вы можете изменить дату и время обратно на оригинал date_sub (.... час, +19). – ethrbunny

+0

Да, но это не цель желаемого запроса: \ –

Смежные вопросы