2010-09-30 84 views
3

我有一個表,表1,包含時間戳字段和溼度,它的數值:查找MAX值的時間在SQL Server

時間戳
「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

我想運行的瞬間即溼度爲最大值返回時間戳值的查詢。在這個例子中,它會返回'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子句中允許的。該查詢應該如何正確寫入?

回答

4
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

+0

完美的作品,謝謝! – KAE 2010-09-30 14:05:23

+0

請看下面的答案。謝謝。 – fancyPants 2010-09-30 14:21:41

+0

您可能想要考慮其他排序。如果溼度具有最大值(我假定爲100),那麼您將需要指定下一個訂單的內容。例如,_timestamp降序可能是一個不錯的選擇,因此您可以看到最近的最大值。 – 2010-09-30 14:29:47