2017-09-25 3 views
-1

Pour chaque EVENT_TYPE qui est répété plus d'une foisSoustraction des valeurs en fonction du temps SQL

enter image description here

je besoin d'une instruction SQL qui renvoie le event_type et la soustraction de la dernière valeur enregistrée pour cette event_type et la deuxième valeur. Je vous remercie de votre aide

+1

est-ce un devoir? –

+1

Qu'est-ce que votre SGBD? Serveur SQL? MySQL? Oracle? Autre chose? – Siyual

+0

Voici ce que j'ai fait: select event_type, sum (cas evenements.value ayant count (*) - events.value ayant count (*) = 2) Comme 'value' des événements où event_type ayant count (*)> 1; –

Répondre

0

Vous pouvez utiliser LEAD() (ou LAG() si vous préférez) pour obtenir l'enregistrement suivant dans la série, et calculer la différence que quand il y a un autre enregistrement et ne prenant la dernière Time par Event_Type:

With Cte As 
(
    Select *, 
      Row_Number() Over (Partition By Event_Type Order By Time Desc) As Row_Number, 
      Lead(Value) Over (Partition By Event_Type Order By Time Desc) As Prev 
    From YourTable 
) 
Select Event_Type, Value - Prev As Value 
From Cte 
Where Prev Is Not Null 
And  Row_Number = 1 
0

J'utilise row_number() et agrégation conditionnelle:

select e.event_type, 
     sum(case when seqnum = 1 then value when seqnum = 2 then - value end) as diff 
from (select e.*, 
      row_number() over (partition by e.event_type order by e.time desc) as seqnum 
     from events e 
    ) e 
group by e.event_type 
having count(*) >= 2;