MySQL Запрос по учету рабочего времени

HELP! Есть таблица с двумя столбцами: datetime (дата и время срабатывания датчика), counter (код сработавшего датчика). Требуется посчитать количество срабатываний каждого датчика за ночную смену с 20.00 первого дня до 8.00 утра следующего дня. Дневную смену считаю так:

MySQL:

SELECT DATE(datetime) as date, counter, COUNT(counter) as count  
FROM table 
WHERE DATE(datetime)>='2020-03-20' and (TIME(datetime)>'08:00:00' and TIME(datetime)<'20:00:00') 
GROUP BY counter, DATE(datetime) 
ORDER BY date, counter;

Заранее спасибо!


Ответы (1 шт):

Автор решения: Alex R.

Без работы с датами в виде строк и без привязки к конкретному дню.

SELECT 
  DATE(datetime) as date, 
  counter, 
  COUNT(counter) as count  
FROM table 
WHERE HOUR(datetime + INTERVAL 12 HOUR) BETWEEN 8 AND 20
GROUP BY counter, DATE(datetime) 
ORDER BY date, counter;

Сдвинул смену в один день (+12 часов), чтобы использовать BETWEEN

Пример: статистика за прошедшую неделю от текущего дня

SELECT 
  DATE(datetime) as date, 
  counter, 
  COUNT(counter) as count  
FROM table 
WHERE datetime >= NOW() - INTERVAL 7 DAY
AND   HOUR(datetime + INTERVAL 12 HOUR) BETWEEN 8 AND 20
GROUP BY counter, DATE(datetime) 
ORDER BY date, counter;
→ Ссылка