2016-04-27 3 views
1

Je travaille sur l'écriture d'une requête qui devrait prendre des valeurs qui tombent dans des fourchettes datetime spécifiques et cracher leur moyenne. Cependant, je cours dans quelques hoquets. Essentiellement, j'ai un grand ensemble de données qui contient plusieurs sous-ensembles de données répartis sur 30 jours. Je dois comprendre comment faire la moyenne des valeurs de 2 jours de 9h à 9h du matin.Valeurs de moyenne comprises dans des plages de dates spécifiques?

Un exemple de mon jeu de données:

Device1  Values  TimeFrame 
---------------------------------------------------------   
Device1  Value1  2016-03-27 00:03:11.000 0.0019 
Device1  Value2  2016-03-27 00:03:11.000 18.7041 
Device1  Value3  2016-03-27 00:03:11.000 49.5902 
Device1  Value1  2016-03-27 00:08:06.000 0.0019 
Device1  Value2  2016-03-27 00:08:06.000 18.7041 
Device1  Value3  2016-03-27 00:08:06.000 49.5902 
Device1  Value1  2016-03-27 00:13:09.000 0.0019 
Device1  Value2  2016-03-27 00:13:09.000 18.7041 
Device1  Value3  2016-03-27 00:13:09.000 49.5902 
Device1  Value1  2016-03-28 00:03:11.000 0.0019 
Device1  Value2  2016-03-28 00:03:11.000 18.7041 
Device1  Value3  2016-03-28 00:03:11.000 49.5902 
Device1  Value1  2016-03-28 00:08:06.000 0.0019 
Device1  Value2  2016-03-28 00:08:06.000 18.7041 
Device1  Value3  2016-03-28 00:08:06.000 49.5902 
Device1  Value1  2016-03-28 00:13:09.000 0.0019 
Device1  Value2  2016-03-28 00:13:09.000 18.7041 
Device1  Value3  2016-03-28 00:13:09.000 49.5902 

je dois calculer les moyennes pour chaque valeur pour chaque jour, mais avec l'hypothèse que le jour commence à 9 heures et se termine à 9 heures le lendemain. C'est un peu foutu. Je ne sais pas trop où commencer même ici.

Répondre

4

Vous pouvez le faire en soustrayant 9 heures et en utilisant group by:

select cast(dateadd(hour, -9, timeframe) as date) as thedate, 
     count(*) as num, avg(value) as avg_value 
from dataset t 
group by cast(dateadd(hour, -9, timeframe) as date) 
order by thedate;