2015-06-30 31 views
1

我對SQL很陌生,到目前爲止,我只使用select語句,並且對SQL中的循環或變量有很少或沒有經驗。SQL中的大型數據集的時間序列

我在SQL服務器中有一個非常大的數據集;從2230個不同的觀測點(節點)每小時觀測一次。我與長相這樣工作表:

TIMESTAMP     NodeName VALUE 
2015-01-01 00:00:00.000 NODE 1 5 
2015-01-01 00:00:00.000 NODE 2 10 
2015-01-01 00:00:00.000 NODE 3 15 
2015-01-01 01:00:00.000 NODE 1 6 
2015-01-01 01:00:00.000 NODE 2 12 
2015-01-01 01:00:00.000 NODE 3 5 

我試圖找到一種方法來建立傳播數據(即,節點1的值 - 節點2對TIMESTAMP的同一條目值)的所有NodeName列中的節點。傳播的順序對我來說並不重要,這意味着節點1 - 節點2與節點2 - 節點1相同。我已經使用python構建了一些內容和磁盤存在的問題空間。

最後,我想插入這個語句的結果到一個新表,與像列:

TIMESTAMP    SPREADNAME   SPREADVALUE 
2015-01-01 00:00:00.000 NODE 1 - NODE 2  -5 

不過,我會很高興只是爲了獲得指出了正確的方向。

在此先感謝您的幫助!

+0

所以如果你有2230個節點,你想(2230 * 2229/2)= 2485335爲每個時間戳傳播? – Quassnoi

+0

我假設你的意思是'datetime'而不是'TIMESTAMP'(這是兩種非常不同的數據類型) – pmbAustin

+0

re:Quassnoi;是的,這是正確的 回覆:pmbAustin-我剛纔調用了列TIMESTAMP,條目是日期時間。我不知道有什麼數據類型叫TIMESTAMP – dclair

回答

0
SELECT nn1.timestamp, nn1.nodeName, nn2.nodeName, nn1.value - nn2.value spread 
FROM nodes nn1 
JOIN nodes nn2 
ON  nn2.timestamp = nn1.timestamp 
     AND nn2.nodeName > nn1.nodeName 

請注意,如果這一年的每小時的觀測數據,從2230個節點,你會得到你的輸出結果集大約22十億條記錄。

如果您希望查詢至少啓動,請在nodes (timestamp, nodeName)上創建索引。

+0

謝謝!我會試一試。有什麼機會我可以快速解釋你的陳述發生了什麼? – dclair

+0

@dclair:對於表中的每一行,它將獲取具有相同時間戳但較大nodeName的行(以刪除對重複項和自匹配項),然後計算差異。 – Quassnoi

+0

美麗 - 再次感謝您的幫助:) – dclair