0

我正在计算时间戳列组织的当前值和上一个值之间的差异?

我的表组织如下:

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

我似乎能找到的唯一解决方案是使用我无法选择的行号,如果有人可以帮助我,我真的很感激它破坏了我的大脑。

4

2 回答 2

1

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

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() 聚合函数添加行号。使用行号,查询尝试从前一个条目中获取值并获取值差。

在这里尝试提琴手

于 2013-02-21T10:44:47.560 回答
0

在 SQL Server 2008 中,我会在outer apply这里推荐一个符合您要求的 find diff 的短代码

    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
于 2017-03-05T05:22:07.813 回答