SQL领先/滞后智能解决方案

时间:2017-11-02 10:25:10

标签: sql sql-server sql-server-2008 lag lead

我正在为仍在使用MS SQL Server 2008 R2的公司工作,因此我无法使用潜在客户/滞后函数。

我知道使用分区等的子查询的一般解决方法来复制它的作用,但我正在处理一个需要大量的线索和滞后的项目。

因此,我的问题是,是否有人想出一种复制可以从UDF等调用的主要功能的智能方法,这会使这个过程更容易?

1 个答案:

答案 0 :(得分:4)

在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()的许多常见用法。