2013-03-05 68 views
0

我有一张表格,其数据看起来像这样。该col1col2是值和指数是基于关闭nodeIDDateHourSELECT根据另一个表中的权重返回聚合答案

nodeID col1 col2 Date  Hour 
    1  8  4  1/1/2010  1 
    2  2  7  1/1/2010  1 
    3  1  2  1/1/2010  1 
    4  6  3  1/1/2010  1  
...  ...  ...  ...  ... 
    1  2  2  1/1/2013  1 
    2  3  4  1/1/2013  1 
    3  7  1  1/1/2013  1 
    4  5  1  1/1/2013  1 

我有一个具有基于天(而不是小时)不同的权重另一个表,它会是这样的,除了除了'foo'之外还会有很多名字。每个名称将位于多行中,并且每个行都具有nodeID的权重因子。

特定日期的每个名称都会有一个加起来为1的加权。

name  nodeID weighting  Date 
foo   1   .6   1/1/2010 
foo   2   .4   1/1/2010 
foo   1   .6   1/1/2013 
foo   2   .3   1/1/2013 
foo   3   .1   1/1/2013 
...   ...  ...   ... 

我需要在表来查询从所有与父数据的加权平均值的名称的数据1.

例如

name col1  col2  Datecol Hour 
foo  5.6  5.2  1/1/2010 1 
foo  2.8  2.5  1/1/2013 1 

注意,从1改变的权重/ 1/2010至2013年1月1日,甚至包括一个额外的nodeID

回答

1
select 
    name, 
    sum(col1*weighting) as weightedCol1, 
    sum(col2*weighting) as weightedCol2, 
    n.date, 
    [hour] 
from 
    nodes n 
    inner join weights w 
     on w.nodeid = n.nodeid 
     and w.date = n.date 
group by 
    name, n.date, [hour] 
+0

感谢你们,我不知道加入是如此灵活,我认为我将不得不做一些摆动或unfivoting。无论如何,通过这样做,我发现weightedcol1,2是他们应该的两倍。任何想法为什么会这样?它很简单,可以把/ 2放在最后,但我不想那样做,除非我知道它会一致。另外,我忘了一件让这有点棘手的事情。权重表每天都没有数值。如何使用<= n.date的权重的最近一天。例如,如果我的体重ex有12/21/2012而不是1/1/2013? – 2013-03-06 02:24:09

+0

根据您提供的模式,您不应该获得双重权重。你确定每个日期每个名称只有一组权重吗?每个节点每个nodeID只有一组节点值? – 2013-03-06 04:32:00

+0

你能够根本改变你的模式吗? – 2013-03-06 04:40:29

相关问题