Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 小时平均值,小时只有一个值时除外_Sql_Sql Server - Fatal编程技术网

Sql 小时平均值,小时只有一个值时除外

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) 如果可能的话,我想修

我有一个在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)
如果可能的话,我想修改它,使它在一个小时内不返回任何行,如果只有一条记录与该小时相匹配。例如,如果在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
看起来像是成功了。我必须仔细检查结果,以确保我会接受你的回答。谢谢。