2015-03-09 4 views
0

У меня есть запрос, который я хочу вернуть наивысшее значение id в idevent, которое находится в заданном диапазоне идентификаторов датчика (sensorID), однако запрос не возвращает наивысшее значение ,MySQL max() - не возвращает значение max()

Результаты при запуске запроса минус max() Постулаты:

mysql> SELECT * FROM events WHERE timestamp BETWEEN "2015-03-09 10:45:35" - INTERVAL 4000 SECOND AND "2015-03-09 10:45:35" AND (sensorID = 34035434 OR sensorID = 34035492 OR sensorID = 34035426 OR sensorID = 34035482 OR sensorID = 34035125 OR sensorID = 34035498 OR sensorID = 34035508 OR sensorID = 34035444 OR sensorID = 34035418 OR sensorID = 34035466 OR sensorID = 34035128 OR sensorID = 34035119 OR sensorID = 34035448 OR sensorID = 34037294 OR sensorID = 34035549); 
+---------+---------------------+----------+-------+ 
| idevent | timestamp   | sensorID | event | 
+---------+---------------------+----------+-------+ 
| 117794 | 2015-03-09 10:14:58 | 34035434 |  9 | 
| 117795 | 2015-03-09 10:15:03 | 34035508 |  9 | 
| 117796 | 2015-03-09 10:15:17 | 34035508 |  1 | 
+---------+---------------------+----------+-------+ 
3 rows in set (0.00 sec) 

Приводимые когда max() заявление добавляется в качестве HAVING пункта:

mysql> SELECT * FROM events WHERE timestamp BETWEEN "2015-03-09 10:45:35" - INTERVAL 4000 SECOND AND "2015-03-09 10:45:35" AND (sensorID = 34035434 OR sensorID = 34035492 OR sensorID = 34035426 OR sensorID = 34035482 OR sensorID = 34035125 OR sensorID = 34035498 OR sensorID = 34035508 OR sensorID = 34035444 OR sensorID = 34035418 OR sensorID = 34035466 OR sensorID = 34035128 OR sensorID = 34035119 OR sensorID = 34035448 OR sensorID = 34037294 OR sensorID = 34035549) HAVING max(idevent); 
+---------+---------------------+----------+-------+ 
| idevent | timestamp   | sensorID | event | 
+---------+---------------------+----------+-------+ 
| 117794 | 2015-03-09 10:14:58 | 34035434 |  9 | 
+---------+---------------------+----------+-------+ 
1 row in set (0.00 sec) 

Почему это не возвращая последнее значение?

+2

Вы в основном фильтровать 'HAVING true', не так ли? –

+0

Вы имеете в виду, что я хочу, чтобы мое утверждение было истинным для значения, которое я хочу вернуть? – Colin747

+1

Почему бы не добавить это в конце 'order by idevent desc limit 1' –

ответ

1

Это может быть сделано с order by limit, поэтому все, что вам нужно добавить следующую строку в конце данного первого запроса

order by idevent desc limit 1 
1

Использование в качестве, используйте order by

SELECT * FROM events WHERE timestamp BETWEEN "2015-03-09 10:45:35" - INTERVAL 4000 SECOND AND "2015-03-09 10:45:35" AND (sensorID = 34035434 OR sensorID = 34035492 OR sensorID = 34035426 OR sensorID = 34035482 OR sensorID = 34035125 OR sensorID = 34035498 OR sensorID = 34035508 OR sensorID = 34035444 OR sensorID = 34035418 OR sensorID = 34035466 OR sensorID = 34035128 OR sensorID = 34035119 OR sensorID = 34035448 OR sensorID = 34037294 OR sensorID = 34035549) 
order by idevent desc 
1

Я думаю, что вам нужно этот запрос:

SELECT MAX(idevent) FROM events WHERE timestamp BETWEEN "2015-03-09 10:45:35" - INTERVAL 4000 SECOND AND "2015-03-09 10:45:35" AND sensorID IN ('34035434', '34035492', '34035426', '34035482', '34035125', '34035498', '34035508', '34035444', '34035418', '34035466', '34035128', '34035119', '34035448', '34037294', '34035549') GROUP BY idevent; 
+0

Можете ли вы рассказать о части «ИЛИ» вашего ответа? – Colin747

+0

Я отредактировал свой ответ. Это помощь? –

+0

Да, спасибо, я не использовал функцию 'IN' до – Colin747

0

Идти здесь http://www.w3schools.com/sql/sql_func_max.asp

запрос неверный.

попробовать это:

SELECT MAX(Price) FROM events WHERE timestamp BETWEEN "2015-03-09 10:45:35" - INTERVAL 4000 SECOND AND "2015-03-09 10:45:35" AND (sensorID = 34035434 OR sensorID = 34035492 OR sensorID = 34035426 OR sensorID = 34035482 OR sensorID = 34035125 OR sensorID = 34035498 OR sensorID = 34035508 OR sensorID = 34035444 OR sensorID = 34035418 OR sensorID = 34035466 OR sensorID = 34035128 OR sensorID = 34035119 OR sensorID = 34035448 OR sensorID = 34037294 OR sensorID = 34035549); 
Смежные вопросы