Bonjour tout le monde,
pour vous mettre en contexte, j'ai une table contenant le statut d'une machine. Il y a une entrée à chaque changement de statut ou a chaque départ de machine.
Dans le bout de code ci-dessous, je ramène mes valeurs à intervalle de 15 minutes. Ça marche très bien, mais je voudrais avoir comme valeur la dernière valeur du groupe en fonction du timestamp.
Admettons que dans le même 15 minutes j'aie: 0,1,1,1,0
AVG() me donnerait 0.4
MIN(): 0
MAX(): 1
SUM():3
Ce que je voudrais c'est un Last() ou un équivalent pour toujours avoir le dernier statut:
Dans le bout de code ci-dessous, je voulais tenter de remplacer le AVG() par un select, mais je n'arrive juste pas à mettre les morceaux du puzzle ensemble. (Je sais que la syntaxe ne fait pas de sens, mais je voulais que vous ayez une idée de ce que je voulais faire...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT DATEADD(MINUTE,(DATEDIFF(MINUTE,'19000101',Timestamp) / @IntervalMinutes) * @IntervalMinutes, '19000101')as Time, tagname, AVG(Value) FROM #Data where Timestamp <= @EndDate and quality like '%GOOD%' GROUP BY DATEADD(MINUTE,(DATEDIFF(MINUTE,'19000101',Timestamp) / @IntervalMinutes) * @IntervalMinutes, '19000101'), tagname ORDER BY Timestamp;
Pour finir je suis convaincu, qu'il y a un moyen très simple de régler mon problème, mais je n'arrive pas à mettre le doigt dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT DATEADD(MINUTE,(DATEDIFF(MINUTE,'19000101',Timestamp) / @IntervalMinutes) * @IntervalMinutes, '19000101')as Time, tagname, Select Max(Timestamp), Value from #Data -- Je veux récupérer la valeur du dernier timestamp de mon groupe FROM #Data where Timestamp <= @EndDate and quality like '%GOOD%' GROUP BY DATEADD(MINUTE,(DATEDIFF(MINUTE,'19000101',Timestamp) / @IntervalMinutes) * @IntervalMinutes, '19000101'), tagname ORDER BY Timestamp;
J'espère que vous popurrez m'aider !
Partager