Mysql -> Как выбрать максимальное значение определенной даты

0

эй, как я могу выбрать наибольшее значение конкретной даты?

Мои данные выглядят так:

id,value_id,sensor_id,value,time(datetime)     
 1,123,gas,10,2018-01-14 01:00:00
 1,123,gas,20,2018-01-14 02:00:00

Я пробовал просматривать вещи (также с MAX), например:

SELECT value
FROM table
WHERE sensor_id = "123"
AND value_id = "gas"
AND time = "2018-01-14"
order by time;
limit 1;

Мне нужно выбрать максимальное значение конкретных данных, которые были зарегистрированы в определенную дату (а не интервал, т.е. 2017-01-01 → 2017-01-03, только для указанной даты: 2018-01-14).

Но я получаю ошибки или неправильные значения... спасибо для помощи

  • 0
    Обратите внимание, что вы должны использовать одинарные кавычки. SELECT MAX(value) FROM table WHERE time = '2018-01-14';
Теги:
select
datetime

2 ответа

0
Лучший ответ

Попробуйте этот запрос:

SELECT value 
FROM table
WHERE sensor_id = '123'
AND value_id = 'gas'
AND time >= '2018-01-14'
AND time < '2018-01-15'
ORDER BY value DESC
LIMIT 1;

Используйте одиночные кавычки вместо двойных кавычек.

Когда вы хотите получить наибольшее значение, вы должны заказать столбец по убыванию (DESC). И если это наивысшее значение не упорядочивается по времени, и вы можете просто select max(value) в этом случае, поскольку это возвращаемое поле, а затем вам не нужен порядок и без ограничений.

Время, которое я предпочитаю делать с этой заменой, потому что иначе он не будет работать с отметками времени, и таким образом он всегда будет работать, независимо от того, имеет ли столбец дату или метку времени.

  • 0
    черт. так просто, может быть, это было до позднего вечера :-)
0

Это требует некоторых вложенных запросов.

Во-первых, вы хотите узнать последнее time для каждого датчика на каждую дату.

Вы так понимаете

                     SELECT DATE(time) date, sensor_id, value_id, 
                            MAX(time) lasttime
                       FROM table
                      GROUP BY DATE(time), sensor_id, value_id

Затем вы хотите получить столбец value для этих строк. Это выглядит так

     SELECT a.value, b.date, b.lasttime, b.sensor_id, b.value_id
       FROM table a
       JOIN (
                     SELECT DATE(time) date, sensor_id, value_id, 
                            MAX(time) lasttime
                       FROM table
                      GROUP BY DATE(time), sensor_id, value_id
            ) b ON a.time=b.lasttime 
               AND a.sensor_id = b.sensor_id
               AND a.value_id = b.value_id

Несколько трюков делают это возможным. Одним из них является использование MAX (date)... GROUP BY DATE (date), чтобы найти последнее время в течение каждого дня. Другой - это присоединение к исходной таблице для извлечения столбца value,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню