2015-06-30 32 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