Sql server 在SQL Server中计算加权平均值

Sql server 在SQL Server中计算加权平均值,sql-server,tsql,Sql Server,Tsql,我试图根据以下计算结果计算加权平均值 我有一个类似以下内容的数据集: item | Date Sent | Date Received 1 | 2 Feb 10am | 3 Feb 10am 1 | 6 Feb 11am | 6 Feb 12pm 2 | 2 Feb 10am | 3 Feb 10am 2 | 6 Feb 11am | 6 Feb 12p

我试图根据以下计算结果计算加权平均值

我有一个类似以下内容的数据集:

item |     Date Sent     |     Date Received
 1   |     2 Feb 10am    |      3 Feb 10am
 1   |     6 Feb 11am    |      6 Feb 12pm
 2   |     2 Feb 10am    |      3 Feb 10am
 2   |     6 Feb 11am    |      6 Feb 12pm
然后,我需要根据四舍五入的时间差计算平均值,意思是:

Time Diff |   Count |
  1       |    2    |
  12      |    2    |
因此,在这种情况下:

1 * 2 + 12 * 2 / (12 + 1)
我已经编写了SQL查询来计算聚合表:

select 
    floor(datediff(hh, dateSent, dateReceived)) as hrs,
    count(item) as freq 
from 
    table
group by 
    floor(datediff(hh, dateSent, dateReceived))
having 
    floor(datediff(hh, dateSent, dateReceived)) < 100
order by 
    floor(datediff(hh, dateSent, dateReceived)) asc;
我应该做子查询吗?我不熟练,我也尝试过,但不断地出现语法错误


有人能帮我获取SQL查询以获得加权平均值吗?

如果您所说的加权平均值是所有时间差的平均值,那么以下内容可能会有所帮助:

select AVG(a.hrs) 
from 
(
    select floor(datediff(hh,dateSent,dateReceived)) as hrs,
    count(item) as freq from table
        group by floor(datediff(hh,dateSent,dateReceived))
            having floor(datediff(hh,dateSent,dateReceived)) <100
--              order by floor(datediff(hh,dateSent,dateReceived)) asc
) a

我的猜测是,您实际上希望以如下方式按ID分组:从myTable group by item中选择item,hrs=AVGDATEDIFFHOUR,dateSent,dateReceived,freq=COUNT*,AVGDATEDIFFHOUR,dateSent,dateReceived<100 ORDER by 2;或者类似的东西?我实际上想要得到加权平均值,我以为这会是子查询的一部分,但我还没有成功完成。为什么你的订单是2?我不确定你所说的加权平均是什么意思。它是如何加权的?另外,orderby2只是懒洋洋的简写,表示第二列的顺序。加权是通过问题中第二个表中的计数来完成的。所以权重就是时间差值。是的,这已经足够接近了,谢谢!我不知道你能做到这一点。我的最终结果是选择suma.hrs*a.freq/suma.freq而不是AVGa.hrs