2013-04-23 51 views
2

我简化现实简单起见,最好的办法...这个数据转换

我有几百万温度观测的表:ObservationID,LocationID,Observation_Date,温度

我想编写一个查询,但得到额外的列,以及,

ObservationID, LocationID, Observation_Date, 温度, Temperature_At_Last_Observation, Temperature_2_o bservations_ago, Temperature_3_observations_ago, Temperature_4_observations_ago, ..等..

在现实中,这要复杂得多,而且我有几百万行的表中。所以我想知道什么方法将是最有效的

我是从递归的角度来攻击这个吗?或者因为每行至少有15个新列会意味着递归效率低下?

或者我坚持使用基于集合的方法,将观察分割为排序顺序,然后加入LocationID?

有什么建议吗?

幸运的是,我还可以选择将数据加载到Teradata平台或SQL Server 2008 R2平台。

+0

您是否熟悉CROSS APPLY?那将是我的第一次尝试。注意:我不知道什么是最有效的方法来解决这个问题,我可能会继续黑客攻击它,直到我找到令我满意的东西。 – Aushin 2013-04-23 15:33:47

回答

2

坚持使用基于SET的方法。

在SQL Server中,考虑在窗口聚合函数中使用LEAD()和LAG()。

在Teradata中,您可以使用Window Aggregate函数结合ROW间的n PRECEDING和n PRECEDING查看'n'行。

有关Teradata中的示例,请查看对问题Compare 3 Consecutive Rows in a table的回复。