Высчитывает среднее, максимальное, максимальное значение за прошлые сутки - 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 часов) из таблицы, указанной в запросе.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д