Высчитывает среднее, максимальное, максимальное значение за прошлые сутки - MySQL
Формулировка задачи:
Ребят подскажите как сделать правильно, хочу вывести среднее, максимальное, максимальное значение за прошлые сутки.
Все четко группирует и выводит, но столкнулся с такой проблемой что с 1-го числа на предыдущий день 31, или 30 числа запрос не корректно отрабатывает.
поставил цифру 1(там у меня контроллер), запрос отрабатывает группировку за прошлые сутки, но как я понимаю если от первого числа отнять один то будет ноль... как быть
#Таблица temp_server
Листинг программы
- 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
Листинг программы
- --
- -- 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-запрос, который выполняет следующие действия:
DATEDIFF(now(),DATE)
- это функция, которая вычисляет разницу между текущей датой (now()
) и датой, указанной в запросе (DATE
). Результатом этого выражения будет количество дней между этими двумя датами.DATEDIFF(now(),DATE)
<= 1 - это условие, которое проверяет, является ли разница между текущей датой и датой в запросе меньше или равной 1. Если это условие истинно, то выполняются следующие действия.SELECT AVG(value), MAX(value)
- это команда SELECT, которая выбирает среднее (AVG
) и максимальное (MAX
) значение из столбцаvalue
.FROM table_name
- это часть запроса, которая указывает, из какой таблицы нужно выбрать данные. Вместоtable_name
должно быть имя вашей таблицы.WHERE DATEDIFF(now(),DATE) <= 1
- это условие, которое ограничивает выборку данных только теми строками, где разница между текущей датой и датой в столбцеDATE
меньше или равна 1.GROUP BY DATE(DATE)
- это часть запроса, которая группирует данные по дате в столбцеDATE
.ORDER BY DATE(DATE) DESC
- это команда ORDER BY, которая сортирует данные по дате в обратном порядке.LIMIT 1
- это команда LIMIT, которая ограничивает выборку одной строкой. Таким образом, этот SQL-запрос выбирает среднее и максимальное значение из столбцаvalue
за последние 24 часа (или меньше, если разница между текущей датой и датой в столбцеDATE
меньше 24 часов) из таблицы, указанной в запросе.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д