2013-04-23 52 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的回覆。