0

x時間ごとにデータをポーリングしていますが、これは液面に基づいています。レベルは常に上昇します。

1週間(1日あたり)の平均増加を計算する方法を知る必要があります。

したがって、日数データが​​1000-1200-1300-1400の場合、平均増加は1日あたり100であることがわかります。

DateReceived  DeviceLevel Serial

1/mm/yyyy     3200         346
1/mm/yyyy     12000        222
2/mm/yyyy     3560         346
2/mm/yyyy     13600         222

使用しようとしています

AVG()

機能しますが、無駄にはなりません。

4

2 に答える 2

1

自己参加を使用して、前日のレベルを見つけることができます。それはあなたに一日の増加を与えます。外部クエリを使用して、1週間の平均増加を見つけることができます。

select  datepart(wk, Day) as WeekNr
,       avg(IncreasePerDay) as AverageDailyIncrease
from    (
        select  cast(d1.MeasureDt as date) as Day
        ,       avg(d2.level) - avg(d1.level) as IncreasePerDay
        from    YourTable d1
        join    YourTable d2
        on      cast(d2.MeasureDt as date) = cast(d1.MeasureDt as date) + 1
        group by
                cast(d1.MeasureDt as date)
        ) as SubQueryAlias
group by
        datepart(wk, Day)
于 2012-07-25T09:06:40.687 に答える
0

あなたのテーブルのために#t

select t2.serial, avg(t2.devicelevel-t1.devicelevel) from #t t1
    inner join #t t2 on t1.datereceived = dateadd(d,1,t2.datereceived)
group by t2.serial

4時間の間隔で...

create table #t (polldate datetime, amount int)
insert #t values ('2012-06-01 16:00', 200),
('2012-06-01 20:00', 220),
('2012-06-02 00:00', 250),
('2012-06-02 04:00', 270)

select avg(t1.amount-t2.amount) from #t t1
    inner join #t t2 on t1.polldate = dateadd(hh,4,t2.polldate)

drop table #t
于 2012-07-25T09:06:21.593 に答える