对Sql Server的每n列内部联接求平均值
在以下场景中,我很难计算10列的平均值: 我有两张桌子对Sql Server的每n列内部联接求平均值,sql,sql-server,sql-server-2008,inner-join,Sql,Sql Server,Sql Server 2008,Inner Join,在以下场景中,我很难计算10列的平均值: 我有两张桌子 -------------------- |Name|ClosestSiteID| |AAA |001 | |BBB |002 | -------------------- 第二张桌子呢 ----------------------- |SiteID|DateTime|Value| |001 |0 |10 | |001 |1 |20 | |001 |2
--------------------
|Name|ClosestSiteID|
|AAA |001 |
|BBB |002 |
--------------------
第二张桌子呢
-----------------------
|SiteID|DateTime|Value|
|001 |0 |10 |
|001 |1 |20 |
|001 |2 |20 |
|001 |3 |10 |
|002 |0 |5 |
|002 |1 |15 |
-----------------------
。。。每个站点ID有数百个条目
我想在这两个表之间,在SiteID上写一个连接,该连接平均每10个SiteID中的条目,以便输出如下所示
-------------------------------------
|Name |ClosestSiteID|DateTime|Value|
|AAA |001 |0 |AVG |
|AAA |001 |10 |AVG |
|BBB |002 |0 |AVG |
|BBB |002 |10 |AVG |
-------------------------------------
在sql中有这样做的方法吗?这里有一种方法。为每个
SiteId
向表2
添加序号。然后将该数字除以10
,并使用结果进行汇总:
select t1.name, t1.ClosestSiteId, min(DateTime) as DateTime,
avg(value) as value
from table1 t1 join
(select t2.*, row_number() over (partition by SiteId order by date) as seqnum
from table2 t2
)
on t1.ClosestSiteId = t2.SiteId;
group by t1.name, t1.ClosestSiteId, (seqnum - 1) / 10
order by name, ClosestSideId, DateTime;