2017-08-25 12 views
1

からの差の合計を計算する:は、私は、次の表を持っている各グループ

Sensor | building | Date_time | Current_value 
1  | 1  | 20.08.2017 | 20 
1  | 1  | 21.08.2017 | 25 
1  | 1  | 22.08.2017 | 35 
2  | 1  | 20.08.2017 | 120 
2  | 1  | 21.08.2017 | 200 
2  | 1  | 22.08.2017 | 210 
3  | 2  | 20.08.2017 | 20 
3  | 2  | 21.08.2017 | 25 
3  | 2  | 22.08.2017 | 85 
5  | 2  | 20.08.2017 | 320 
5  | 2  | 21.08.2017 | 400 
5  | 2  | 22.08.2017 | 410 

建物IDであるように、センサIDは、一意であると仮定されます。

各センサのMAX値からMIN値を差し引いて、各建物の合計をグループ化することによって、任意の所与の時間枠について各建物の合計値を計算する必要があります。上記のサンプルで

それは正しい方向への

Sensor 1: (35 - 20)=15 
Sensor 2: (210-120)=90 
Building 1 = 15+90 = 105 
(...) 
Building 2 = 65+90 = 155 

任意のポインタは非常に高く評価されていることでしょう!

+0

合計は、あなたがものを追加していることを意味します。あなたが何を記述するかは、建物ごとのセンサ差*の合計です。 –

+0

建物にはいくつかのセンサーがあるため、個人差を追加する必要があります。私は喜んでそれをより明確にするためにトピックを言い換えるでしょう。 –

答えて

2

センサーごとに最小値と最大値の差を計算する方法をお尋ねします。集計建物ごとの差異。

with diffs as (
    SELECT Building,Sensor, MAX(Current_Value)-MIN(Current_Value) as diff 
    FROM SomeTable 
    GROUP BY Building, Sensor 
) 
SELECT Building,sum(diff) 
FROM diffs 
GROUP BY Building 

あなたは期間を制限したい場合は、CTE内でそうする必要があります:

with diffs as (
    SELECT Building,Sensor, MAX(Current_Value)-MIN(Current_Value) as diff 
    FROM SomeTable 
    WHERE Date_Time between @start and @end 
    GROUP BY Building, Sensor 
) 
SELECT Building,sum(diff) 
FROM diffs 
GROUP BY Building 

あなたが他で使用することができ、ユーザー定義関数には、このクエリを変換することができますクエリ:(上最小/最大窓関数を使用して

create function fn_TotalDiffs(@start datetime2(0), @end datetime2(0)) 
returns table 
as 
Return (
    with diffs as (
     select Building,Sensor, MAX(Current_Value)-MIN(Current_Value) as diff 
     from SomeTable 
     Group by Building, Sensor 
    ) 
    select Building,sum(diff) as Total 
    from diffs 
    Group by Building 
) 
2

別のオプション)

Select Building 
     ,Total = sum(R1) 
From (
     Select Distinct 
       Building 
       ,R1 = max([Current_value]) over (Partition By Building,Sensor) 
        -min([Current_value]) over (Partition By Building,Sensor) 
     From YourTable 
     Where Date_time between @Date1 and @Date2 
    ) A  
Group By Building 

戻り

Building Total 
1   105 
2   155 
関連する問題