对Sql Server的每n列内部联接求平均值

对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

在以下场景中,我很难计算10列的平均值:

我有两张桌子

--------------------
|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;