SQL按时间戳列计算当前值和最后值之间的差异

时间:2013-02-21 10:11:39

标签: sql sql-server sql-server-2008 datediff

我希望计算当前和&之间的差异。 last time by timestamp column?

我的表格安排如下:

MeterID(PK,FK,int.not null), ActualTimeStamp(smalldatetime,not null), Value(float,null)

Meter ID     ActualTimeStamp     Value          
312514     2013-01-01 08:08:00   72         
312514     2013-01-01 08:07:00   12 

所以我的答案应该是72 - 12 = 60

我可以找到的唯一解决方案是使用行号,我没有选择,如果有人可以帮助id真的很赞赏它作为它破坏我的大脑。

2 个答案:

答案 0 :(得分:0)

这是一个可以帮助您的查询。只需修改它以适合您的需要/表名/等。

with sub as (
  select meterid,
         actualtimestamp,
         value,
         row_number() over (partition by meterid order by actualtimestamp desc) as rn
     from test  
  )
select meterid,
       actualtimestamp,
       value,
       value - isnull((select value
                 from sub
                where s.meterid = meterid
                  and rn = s.rn + 1), value) as answer
from sub s
order by meterid, actualtimestamp desc;

它的基本功能是使用row_number()聚合函数添加行号。使用行号,查询尝试从前一个条目获取值并获得值差异。

尝试fiddler here

答案 1 :(得分:0)

在SQL Server 2008中,我建议在outer apply使用您的要求查找差异的短代码

    select t.*, isnull((t.value - tprev.value),0) as diff
from test t outer apply
     (select top 1 tprev.*
      from test tprev
      where tprev.meterid = t.meterid and
            tprev.actualtimestamp < t.actualtimestamp
      order by tprev.actualtimestamp desc
       )tprev