SQL中大型数据集的时间序列

时间:2015-06-30 21:41:18

标签: sql-server

我是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

然而,我只是为了指出正确的方向而感到高兴。

提前感谢您的帮助!

1 个答案:

答案 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)上创建索引。