2016-09-15 89 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