我在一家仍在使用 MS SQL Server 2008 R2 的公司工作,所以我不能使用 Lead/Lag Functions。
我知道带有分区等的子查询的一般解决方法来复制它的作用,但我正在研究一个需要使用大量领先和滞后的项目。
因此,我的问题是,有没有人想出一种聪明的方法来复制可以从 UDF 等调用的引导函数的作用,从而使这个过程更容易?
我在一家仍在使用 MS SQL Server 2008 R2 的公司工作,所以我不能使用 Lead/Lag Functions。
我知道带有分区等的子查询的一般解决方法来复制它的作用,但我正在研究一个需要使用大量领先和滞后的项目。
因此,我的问题是,有没有人想出一种聪明的方法来复制可以从 UDF 等调用的引导函数的作用,从而使这个过程更容易?
在 SQL Server 2008 中,您可以使用apply
:
select t.*, tprev.*
from t outer apply
(select top 1 tprev.*
from t tprev
where tprev.? = t.? and -- partitioning columns
tprev.? < t.? -- order by columns
order by ? desc -- order by columns, ordering reversed
) tprev;
这将替代滞后 1(类似的代码句柄lead()
)。它可以同时处理多个列。这涵盖了lag()
.