2010-09-30 5 views
3

J'ai une table Table1, contenant les champs TimeStamp et l'humidité, qui ont les valeurs:Trouvez le temps d'une valeur MAX dans SQL Server

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 '

Humidité
15.291
17,379
16,857
16,335
15,813

Je voudrais exécuter une requête qui retourne à l'instant que l'humidité est à son maximum la valeur de TimeStamp. Dans cet exemple, il retournera '2010-09-29 11: 05: 29.7' parce que c'est là que l'humidité est sa valeur la plus élevée, 17,379. Je veux aussi limiter la plage de temps, donc ce serait quelque chose comme

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' 

mais cela donne une erreur que les agrégats ne sont pas autorisés dans une clause where. Comment cette requête doit-elle être écrite correctement?

Répondre

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 

Ou SELECT TOP 1 WITH TIES _TimeStamp si vous voulez ramener tous les horodateurs correspondant à l'humidité max.

Pour les scénarios de regroupement plus complexes, vous devriez étudier les fonctions de classement telles que row_number

+0

fonctionne parfaitement, merci! – KAE

+0

S'il vous plaît jeter un oeil à ma réponse ci-dessous. Merci. – fancyPants

+0

Vous pouvez envisager un tri supplémentaire. Si l'humidité a une valeur maximale (je suppose que 100), alors vous voudrez spécifier ce que l'ordre suivant devrait être. Par exemple, _timestamp descending peut être un bon choix afin que vous puissiez voir le plus récent max. –

Questions connexes