2017-11-02 8 views
0

私はまだMS SQL Server 2008 R2を使用している企業で働いており、リード/ラグ機能は使用できません。SQLリード/ラグスマートソリューション

私はこれが何を複製するためにパーティションなどのサブクエリの一般的な回避策を知っていますが、私はたくさんのリードとラグが必要なプロジェクトに取り組んでいます。

私の質問は、このプロセスを簡単にするUDFなどから呼び出すことができる鉛の機能を複製するスマートな方法を思いついていますか?

答えて

4

SQL Server 2008では、あなたはapplyを使用することができます。これは、(同様のコードがlead()を扱う)1の遅れを代用します

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; 

。同時に複数の列を扱うことができます。これは、lag()の多くの一般的な用途に適用されます。