2017-09-25 24 views
-1

对于每个EVENT_TYPE值被重复不止一次减法取决于时间SQL

enter image description here

我需要返回event_type并为此event_type,注册的最后一个值的减法SQL语句第二值。我感谢你的帮助

+1

这是一门功课? –

+1

什么是您的DBMS? SQL Server? MySQL的?甲骨文?还有别的吗? – Siyual

+0

这就是我所做的: select event_type,sum(case event.value having count(*) - events.value have count(*)= 2)作为来自event_type具有count(*)> 1的事件的“value” –

回答

0

可以使用LEAD()(或LAG()如果你喜欢),以获得在该系列中的下一个记录,并计算差值时,才会有另一条记录,只有采取每Event_Type最新Time

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

我会用row_number()和有条件聚集:

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;