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:

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;
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,
         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;
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.

J'espère que vous popurrez m'aider !