ホームページ >データベース >mysql チュートリアル >SQL Server 2008 で LEAD および LAG 機能をレプリケートするにはどうすればよいですか?
SQL Server 2008 の LEAD LAG 関数の代替
SQL Server 2008 では、LEAD 関数と LAG 関数を使用できないため、比較する際に課題が生じます現在の行と後続の行の値。この記事では、この機能を必要とする SQL Server 2008 ユーザー向けの代替方法について説明します。
次の行と前の行をクエリする
目的は、現在の行が存在する行を分離することです。 StatusId は 1 で、次の行の StatusId は 6 で、両方の行のタイムスタンプは同じです。 LEAD 関数と LAG 関数は使用できないため、自己結合を使用できます。
自己結合アプローチ
次のクエリは、テーブル間の結合を確立します (参照) t) と「次の行」テーブル (tnext と呼ばれます)。結合の条件には次が含まれます:
正確な分一致のクエリ
時間内ではなく正確な分一致が必要な場合分が近い場合は、クエリを変更して条件 datepart( minutes, t.MinStartTime) = datepart( minutes, ) を含めることができます。 tnext.MinStartTime).
クエリの例
例として提供されたテーブルを使用して、クエリの 2 つのバージョンを次に示します。
バージョン 1 (数分以内)近接):
select t.* from table t join table tnext on t.id = tnext.id - 1 and t.StatusId = 1 and tnext.StatusId = 6 and datediff(second, t.MinStartTime, tnext.MinStartTime) < 60;
バージョン 2 (正確な分一致):
select t.* from table t join table tnext on t.id = tnext.id - 1 and t.StatusId = 1 and tnext.StatusId = 6 and datediff(second, t.MinStartTime, tnext.MinStartTime) < 60 and datepart(minute, t.MinStartTime) = datepart(minute, tnext.MinStartTime);
出力
これらのクエリの出力は、指定された基準を満たす必要な行を取得します。 ID 6。StatusId は 1 で、その後に同じ分のタイムスタンプで StatusId 6 の ID が続きます (バージョン 2 の場合)。
以上がSQL Server 2008 で LEAD および LAG 機能をレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。