2013-03-05 31 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

相關問題