SQL Server 2008 の LEAD/LAG 関数の代替ソリューション
LEAD 関数と LAG 関数がない SQL Server 2008 を使用する場合、現在の行の値を後続の行の値と比較するときに困難に遭遇する可能性があります。ただし、この機能を実現する別の方法もあります。
イベントの進行状況を表す連続した ID を持つ行がテーブルに含まれるシナリオを考えてみましょう。目標は、現在の行のステータスが 1、次の行のステータスが 6、および 2 つの行間の時間差が最小限 (1 分未満) である行を識別することです。
目的LEAD または LAG 機能を使用しない場合は、自己結合を使用できます。次のクエリはこの操作を実行します:
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;
このクエリは、現在の行のステータスが 1、次の行のステータスが 6、および 2 つの行間の時間差が 未満である行を取得します。 60 秒。
より正確な一致が必要な場合、時差が同じ暦分以内に収まる必要がある場合は、追加の条件をクエリ:
AND DATEPART(MINUTE, t.MinStartTime) = DATEPART(MINUTE, tnext.MinStartTime);
この改訂されたクエリにより、分の時間と日付の両方のコンポーネントが一致することが保証されます。
自己結合技術を活用することで、LEAD と同様の機能を実現できます。 LAG 関数は、SQL Server 2008 の代替ソリューションを提供します。
以上がSQL Server 2008 で LEAD/LAG 機能をレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。