2013-03-07 2 views
0

Возможно ли написать запрос, который находит максимальное значение из группы минимальных значений, которые извлекаются в одном запросе?Запрос SQl для определения максимального значения из минимальных результатов

Можно легко заказать минимальные значения, уменьшив значение (которое оставляет желаемое максимальное значение в верхней части списка), но мне любопытно, может ли быть построен запрос, который вернет только это значение и ничего больше.

запрос, который извлекает минимумы:

SELECT dbo.tblDevices.Status 
, L.Device_id 
, MIN(L.DateAndTime) As 'End Date' 
FROM dbo.tblDeviceLocation AS L 
JOIN dbo.tblDevices 
ON L.Device_id = dbo.tblDevices.Device_id 
GROUP BY L.Device_id, dbo.tblDevices.Status 

Я хочу, чтобы найти строку с макс этих минут. Я думал о попытке использовать подзапрос, но я не вижу его работы, потому что он возвращает N-минимальное количество строк. Затем я подумал об использовании COMPUTE, потому что это можно было бы считать суммой, но это также не работает, потому что вы не можете суммировать то, что не сгруппировано (L.DateAndTime).

Любые мысли?

* Редактировать: Я только что наткнулся на эту статью http://www.programmerinterview.com/index.php/database-sql/find-maximum-value-without-using-aggregate/, которая из беглого быстрого чтения может быть применима. Я буду обновлять, когда/если я что-то обнаружил.

ответ

0

Вы можете использовать ORDER BY и если вы используете SQL-сервера TOP 1, если вы используете MySQL, то вы должны использовать LIMIT 1 в конце запроса

SELECT TOP 1 dbo.tblDevices.Status 
, L.Device_id 
, MIN(L.DateAndTime) As 'End Date' 
FROM dbo.tblDeviceLocation AS L 
JOIN dbo.tblDevices 
ON L.Device_id = dbo.tblDevices.Device_id 
GROUP BY L.Device_id, dbo.tblDevices.Status 
ORDER BY MIN(L.DateAndTime) DESC // order by max value 
+0

Omg ... Сейчас я мертв мозгом. Вот и все. Благодарю. –

+0

@Snake_Plissken нет проблем, у всех нас были те дни. Если это решило вашу проблему, не забудьте отметить ее как принятый ответ. –

Смежные вопросы