我是SQL的新手,到目前为止,我只使用了select语句,对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
我试图找到一种方法来为NodeName中的所有节点构建扩展数据(即NODE 1的值 - 节点2对于TIMESTAMP的相同条目的值)柱。传播的顺序对我来说并不重要,这意味着NODE 1 - NODE 2与NODE 2 - NODE 1相同。我已经使用python从SQL转储中构建了一些内容,但是存在内存问题和磁盘空间。
最终,我希望将此语句的结果插入到新表中,其中包含以下列:
TIMESTAMP SPREADNAME SPREADVALUE
2015-01-01 00:00:00.000 NODE 1 - NODE 2 -5
然而,我只是为了指出正确的方向而感到高兴。
提前感谢您的帮助!
答案 0 :(得分: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个节点开始每年进行一年的观察,那么您的输出结果集中将获得大约220亿条记录。
如果您希望查询至少开始,请在nodes (timestamp, nodeName)
上创建索引。