Предполагается, что таблица базы данных имеет таблицу со следующей схемой:
CREATE TABLE t1 (
c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
c2 VARCHAR(100),
c3 VARCHAR(100),
c4 DATE,
c5 TIME,
c6 DATETIME);
INSERT INTO t1 (c1,c2,c3,c4,c5,c6)
VALUES
(1,'DDA1123_12112018','55307','2018-12-11','00:43:00', '2018-12-11 00:43:00'),
(2,'DDA1123_12112018','55307','2018-12-11','00:07:00', '2018-12-11 00:07:00'),
(3,'DDA1124_12112018','55308','2018-12-11','03:07:00', '2018-12-11 03:07:00'),
(4,'DDA1124_12112018','55308','2018-12-11','04:07:00', '2018-12-11 04:07:00'),
(5,'DDA1124_12112018','55308','2018-12-11','07:07:00', '2018-12-11 07:07:00'),
(6,'DDA1125_12112018','55309','2018-12-11','06:07:00', '2018-12-11 06:07:00'),
(7,'DDA1125_12112018','55309','2018-12-11','07:57:00', '2018-12-11 07:57:00'),
(8,'DDA1126_12112018','55310','2018-12-11','08:07:00', '2018-12-11 08:07:00'),
(9,'DDA1127_12112018','55311','2018-12-11','12:07:00', '2018-12-11 12:07:00'),
(10,'DDA1127_12112018','55311','2018-12-11','14:07:00', '2018-12-11 14:07:00'),
(11,'DDA1127_12112018','55311','2018-12-11','17:07:00', '2018-12-11 17:07:00');
В этом случае вы можете использовать CASE ... WHEN
в GROUP BY
, как в этом примере запроса.
SELECT c1,c2,c3,c4,c5,c6,
CASE TRUE
WHEN HOUR(c6) BETWEEN 0 AND 2 THEN 0
WHEN HOUR(c6) BETWEEN 2 AND 4 THEN 2
WHEN HOUR(c6) BETWEEN 4 AND 6 THEN 4
WHEN HOUR(c6) BETWEEN 6 AND 8 THEN 6
WHEN HOUR(c6) BETWEEN 8 AND 10 THEN 8
WHEN HOUR(c6) BETWEEN 10 AND 12 THEN 10
WHEN HOUR(c6) BETWEEN 12 AND 14 THEN 12
WHEN HOUR(c6) BETWEEN 14 AND 16 THEN 14
WHEN HOUR(c6) BETWEEN 16 AND 18 THEN 16
WHEN HOUR(c6) BETWEEN 18 AND 20 THEN 18
WHEN HOUR(c6) BETWEEN 20 AND 22 THEN 20
WHEN HOUR(c6) BETWEEN 22 AND 24 THEN 22
END AS c7 FROM t1
GROUP BY c7;
Вы можете просмотреть результаты приведенного выше примера в SQL Fiddle .
EDIT
Для лучшего результата приведенный выше запрос можно переписать:
SELECT c1,c2,c3,c4,c5,c6,
CASE TRUE
WHEN HOUR(c6) BETWEEN 0 AND 1 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 0
WHEN HOUR(c6) BETWEEN 2 AND 3 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 2
WHEN HOUR(c6) BETWEEN 4 AND 5 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 4
WHEN HOUR(c6) BETWEEN 6 AND 7 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 6
WHEN HOUR(c6) BETWEEN 8 AND 9 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 8
WHEN HOUR(c6) BETWEEN 10 AND 11 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 10
WHEN HOUR(c6) BETWEEN 12 AND 13 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 12
WHEN HOUR(c6) BETWEEN 14 AND 15 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 14
WHEN HOUR(c6) BETWEEN 16 AND 17 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 16
WHEN HOUR(c6) BETWEEN 18 AND 19 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 18
WHEN HOUR(c6) BETWEEN 20 AND 21 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 20
WHEN HOUR(c6) BETWEEN 22 AND 23 AND MINUTE(c6) BETWEEN 0 AND 59 THEN 22
END AS c7 FROM t1
GROUP BY c7;
Вы можете просмотреть результаты отредактированного примера в этой SQL Fiddle .