1

CounterValueSQL Server 2012 で動作する次のクエリを使用して、列の値の時間平均を取得します。

select 
    dateadd(hour, datediff(hour, 0, CounterDateTime), 0), 
    avg(CounterValue) 
from mopsxactthroughput 
group by 
    dateadd(hour, datediff(hour, 0, CounterDateTime), 0)

可能であれば、その時間に一致するレコードが 1 つしかない場合、1 時間行を返さないように変更したいと思います。たとえば、2013-06-06T20:00:00 と 2013-06-06T21:00:00 の間にレコードが 1 つしかない場合、その 1 時間の間は行が返されないようにします。

に求めるのは少し難しいと思いますSELECTが、おそらく方法はあります。(私のフォールバックは、時間ごとにグループ化されたすべてのレコードを返し、Java で行セットを繰り返し、そこで平均化/破棄を適用することです。)

4

2 に答える 2

1

おそらく、このCTEは機能します:

with cte as( 
    select dateadd(hour, datediff(hour, 0, CounterDateTime), 0) as Hour, 
           avg(CounterValue)over(partition by dateadd(hour, datediff(hour, 0, CounterDateTime), 0)) as AvgCounter,
           Count(*)over(partition by dateadd(hour, datediff(hour, 0, CounterDateTime), 0)) as HourCount,
           CounterValue,
           CounterDateTime
    from mopsxactthroughput 
)
select Hour, CounterValue, CounterDateTime, AvgCounter
from cte
where HourCount > 1
于 2013-07-20T20:49:20.300 に答える