2016-09-15 152 views
1

我問這個問題:替代LAG()在SQL Server 2008

create partition based on the difference between subsequent row indices in sql server 2012

我只是想知道這是怎麼在舊版本的SQL Server來完成,比如SQL 2008中LAG是不是公認的功能。反正在老版本的SQL中實現滯後函數嗎?

編輯:也許我應該更明確,在解決問題提到的滯後功能,多次使用,有沒有比使用多個熱膨脹係數,以獲得相同的結果更有效的方法?

+0

的CTE(WITH語句)可以用來給每個行你有興趣一個row_number(),通過一個合適的SORT BY,那麼CTE可以自行加入row = row-1,row = ro1 + 1 – Cato

+0

@AndrewDeighton如果我需要多次使用滯後函數,那麼會導致使用很多CTE,有沒有更有效的方法來做到這一點? – dimebucker91

+0

您可以使用多個不同的row_number()(在不同的字段中的ORDER BY)創建一個CTE - 然後您必須在連接中多次連接它 - 它可能會導致很多大表的排序。你可以嘗試子查詢 - 這也可能會遇到效率問題。 – Cato

回答

2

爲了達到LAG相同的概念在舊版本中,你必須做出left join上,例如在同一個表:

select * 
from A a 
left join B b on b.Column = a.Column - 1