Sql 小时平均值,小时只有一个值时除外
我有一个在SQL Server 2012上运行的查询,它为我提供了Sql 小时平均值,小时只有一个值时除外,sql,sql-server,Sql,Sql Server,我有一个在SQL Server 2012上运行的查询,它为我提供了CounterValue列中值的每小时平均值: select dateadd(hour, datediff(hour, 0, CounterDateTime), 0), avg(CounterValue) from mopsxactthroughput group by dateadd(hour, datediff(hour, 0, CounterDateTime), 0) 如果可能的话,我想修
CounterValue
列中值的每小时平均值:
select
dateadd(hour, datediff(hour, 0, CounterDateTime), 0),
avg(CounterValue)
from mopsxactthroughput
group by
dateadd(hour, datediff(hour, 0, CounterDateTime), 0)
如果可能的话,我想修改它,使它在一个小时内不返回任何行,如果只有一条记录与该小时相匹配。例如,如果在2013-06-06T20:00:00和2013-06-06T21:00:00之间只有一条记录,则我不希望在这一小时内返回任何行
我对
选择的要求有点高,但也许有办法。(我的备用方法是返回按小时分组的所有记录,然后迭代Java中自己设置的行,并在其中应用平均值/丢弃值。)也许这个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
只需添加一个having
子句:
select
dateadd(hour, datediff(hour, 0, CounterDateTime), 0),
avg(CounterValue)
from mopsxactthroughput
group by
dateadd(hour, datediff(hour, 0, CounterDateTime), 0)
having count(*) > 1
添加HAVING COUNT(*)>1
或HAVING COUNT(当CounterDateTime介于'2013-06-06T20:00:00'和'2013-06-06T21:00:00'之间时,则为1结束)>1
看起来像是成功了。我必须仔细检查结果,以确保我会接受你的回答。谢谢。