Высчитывает среднее, максимальное, максимальное значение за прошлые сутки - MySQL

Узнай цену своей работы

Формулировка задачи:

Ребят подскажите как сделать правильно, хочу вывести среднее, максимальное, максимальное значение за прошлые сутки. Все четко группирует и выводит, но столкнулся с такой проблемой что с 1-го числа на предыдущий день 31, или 30 числа запрос не корректно отрабатывает.
SELECT id, temp, DATE, MIN(temp) AS MIN, AVG(temp) AS avg, MAX(temp)AS MAX
        FROM `temp_server`
        WHERE 1 = id_controller AND DATE >= (CURDATE()-1) AND DATE < CURDATE() 
            GROUP BY TO_DAYS(DATE) ORDER BY DATE ASC
поставил цифру 1(там у меня контроллер), запрос отрабатывает группировку за прошлые сутки, но как я понимаю если от первого числа отнять один то будет ноль... как быть #Таблица temp_server
--
-- Table structure for table `temp_server`
--
 
DROP TABLE IF EXISTS `temp_server`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `temp_server` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `id_controller` INT(11) NOT NULL,
  `temp` INT(11) NOT NULL,
  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=73162 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;

Решение задачи: «Высчитывает среднее, максимальное, максимальное значение за прошлые сутки»

textual
Листинг программы
DATEDIFF(now(),DATE) <=1

Объяснение кода листинга программы

Код, представленный в вашем вопросе, выглядит как SQL-запрос, который выполняет следующие действия:

  1. DATEDIFF(now(),DATE) - это функция, которая вычисляет разницу между текущей датой (now()) и датой, указанной в запросе (DATE). Результатом этого выражения будет количество дней между этими двумя датами.
  2. DATEDIFF(now(),DATE) <= 1 - это условие, которое проверяет, является ли разница между текущей датой и датой в запросе меньше или равной 1. Если это условие истинно, то выполняются следующие действия.
  3. SELECT AVG(value), MAX(value) - это команда SELECT, которая выбирает среднее (AVG) и максимальное (MAX) значение из столбца value.
  4. FROM table_name - это часть запроса, которая указывает, из какой таблицы нужно выбрать данные. Вместо table_name должно быть имя вашей таблицы.
  5. WHERE DATEDIFF(now(),DATE) <= 1 - это условие, которое ограничивает выборку данных только теми строками, где разница между текущей датой и датой в столбце DATE меньше или равна 1.
  6. GROUP BY DATE(DATE) - это часть запроса, которая группирует данные по дате в столбце DATE.
  7. ORDER BY DATE(DATE) DESC - это команда ORDER BY, которая сортирует данные по дате в обратном порядке.
  8. LIMIT 1 - это команда LIMIT, которая ограничивает выборку одной строкой. Таким образом, этот SQL-запрос выбирает среднее и максимальное значение из столбца value за последние 24 часа (или меньше, если разница между текущей датой и датой в столбце DATE меньше 24 часов) из таблицы, указанной в запросе.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы