SQL Server 2008 の LEAD 関数と LAG 関数の代替
SQL Server 2008 には、SQL Server 2008 にアクセスするために使用される LEAD 関数と LAG 関数がありません。シーケンス内の次の値と前の値。ただし、同様の機能を実現する別の方法もあります。
問題ステートメント
現在の行のステータスを後続の行のステータスと比較するシナリオを考えてみましょう。具体的には、現在の行のステータスが「1」で次の行のステータスが「6」である行を識別し、これらの行のタイムスタンプが分まで一致していることを確認することを目的としています。
解決策
SQL Server 2008 でこれを実現する 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;
このクエリは、指定された条件に基づいて現在の行 (t) と後続の行 (tnext) を効果的に比較します。 datediff 関数は、タイムスタンプ間の時間差が 60 秒を超えないことを保証します。
カレンダー時間の分の厳密な一致が必要な場合は、次のようにクエリを変更できることに注意してください。
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);
これらの代替手法を採用することで、SQL Server 2008 の LEAD 関数および LAG 関数と同様の機能を実現できます。
以上がSQL Server 2008 で LEAD および LAG 機能をレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。