ホームページ >データベース >mysql チュートリアル >SQL Server 2008 で LEAD および LAG 機能をレプリケートするにはどうすればよいですか?

SQL Server 2008 で LEAD および LAG 機能をレプリケートするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-28 21:23:11972ブラウズ

How to Replicate LEAD and LAG Functionalities in SQL Server 2008?

SQL Server 2008 の LEAD LAG 関数の代替

SQL Server 2008 では、LEAD 関数と LAG 関数を使用できないため、比較する際に課題が生じます現在の行と後続の行の値。この記事では、この機能を必要とする SQL Server 2008 ユーザー向けの代替方法について説明します。

次の行と前の行をクエリする

目的は、現在の行が存在する行を分離することです。 StatusId は 1 で、次の行の StatusId は 6 で、両方の行のタイムスタンプは同じです。 LEAD 関数と LAG 関数は使用できないため、自己結合を使用できます。

自己結合アプローチ

次のクエリは、テーブル間の結合を確立します (参照) t) と「次の行」テーブル (tnext と呼ばれます)。結合の条件には次が含まれます:

  • ID 値が一致し、隣接する行を示します
  • t の StatusId が 1 で、現在の行が目的のステータスであることを示します
  • tnext の StatusId は 6 で、ターゲット ステータスを持つ後続の行を示します
  • 時間差MinStartTime フィールド間の間隔は 60 秒未満で、時間の近さを確保します

正確な分一致のクエリ

時間内ではなく正確な分一致が必要な場合分が近い場合は、クエリを変更して条件 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。