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

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

Patricia Arquette
リリース: 2024-12-17 22:27:11
オリジナル
905 人が閲覧しました

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

SQL Server 2008 の SQL LEAD 関数と LAG 関数の代替

SQL Server 2008 では、LEAD 関数と LAG 関数は使用できません。連続する行間の値を比較するときに課題が生じます。このガイドでは、同様の機能を実現するための代替アプローチを紹介します。

問題ステートメント

目標は、現在の行の StatusId が 1 である行と、後続の行を識別することです。 StatusId は 6 で、時間は同じ 1 分以内です。たとえば、提供されたテーブルでは、行 ID 6 を取得したいとします。これは、行 ID 6 の StatusId が 1、行 ID 7 の StatusId が 6 であり、それらの時間は基本的に同じです: 2014-02-19 06: 11.

解決策 1:自己結合

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;
ログイン後にコピー

このクエリは、現在の行の ID が次の行の ID より 1 小さい行を返します。 、StatusId は現在の行では 1、次の行では 6 であり、それらの間の時間差は 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);
ログイン後にコピー

このクエリは、2 つの行の分が等しいかどうかをさらにチェックし、それらが同じカレンダーに属していることを確認します。分。

以上がSQL Server 2008 で SQL LEAD および LAG 機能をレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート