【问题标题】:Averaging every n columns Inner Join for Sql Server为 Sql Server 平均每 n 列内连接
【发布时间】:2014-04-29 12:26:47
【问题描述】:

在以下情况下,我无法确定如何平均 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   |
-----------------------

...等等,每个 SiteID 都有数百个条目

我想在这两个表之间编写一个连接,在 SiteID 上平均站点 ID 中的每 10 个条目,以便输出看起来像这样

-------------------------------------
|Name  |ClosestSiteID|DateTime|Value|
|AAA   |001          |0       |AVG  |
|AAA   |001          |10      |AVG  |
|BBB   |002          |0       |AVG  |
|BBB   |002          |10      |AVG  |
-------------------------------------

有没有办法在sql中做到这一点?

【问题讨论】:

    标签: sql sql-server sql-server-2008 inner-join


    【解决方案1】:

    这是一种方法。为每个SiteId 添加一个序列号到table2。然后将此数字除以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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多