Найти время максимального значения в SQL Server - PullRequest
3 голосов
/ 30 сентября 2010

У меня есть таблица Table1, содержащая поля TimeStamp и Humidity, которые имеют значения:

TimeStamp
'2010-09-29 11: 05: 29.6'
'2010-09-29 11: 05: 29,7 '
' 2010-09-29 11: 05: 29,8 '
' 2010-09-29 11: 05: 29,9 '
' 2010-09-29 11:05: 30,0 '

Влажность
15,291
17,379
16,857
16,335
15,813

Я хочу выполнить запрос, который возвращает значение TimeStampв тот момент, когда влажность достигает своего максимума.В этом примере он вернул бы «2010-09-29 11: 05: 29.7», потому что именно тогда влажность является его наибольшим значением, 17.379.Я также хочу ограничить временной диапазон, поэтому это будет что-то вроде

SELECT _TimeStamp from Table1 
WHERE Humidity = MAX(Humidity) AND 
_TimeStamp >= '2010-09-29 11:05:29.6' AND 
_TimeStamp <= '2010-09-29 11:05:30.0'

, но это дает ошибку, что агрегаты не разрешены в предложении where.Как правильно написать этот запрос?

1 Ответ

4 голосов
/ 30 сентября 2010
SELECT TOP 1 _TimeStamp
 from Table1 
WHERE 
_TimeStamp BETWEEN '2010-09-29 11:05:29.6' AND  '2010-09-29 11:05:30.0'
ORDER BY Humidity DESC

или SELECT TOP 1 WITH TIES _TimeStamp, если вы хотите вернуть все отметки времени, соответствующие максимальной влажности.

Для более сложных сценариев группировки вы должны изучить функции ранжирования, такие как row_number

...