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