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、要件に応じて、ここでfinddiffの短いコードをお勧めします。

    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 に答える