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 サイトの他の関連記事を参照してください。