SQL Server 2008 中SQL LEAD 和LAG 函數的替代品
在SQL Server 2008 中,LEAD 和LAG 函數不可用,這可以比較連續行之間的值時會帶來挑戰。本指南提供了實現類似功能的替代方法。
問題陳述
目標是識別目前行的 StatusId 為 1 的行以及後續行StatusId 為 6,時間在同一分鐘內。例如,在提供的表中,我們要檢索行 Id 6,因為行 Id 6 的 StatusId 為 1,行 Id 7 的 StatusId 為 6,它們的時間基本上相同:2014-02-19 06: 11.
解決方案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 小1 的行,目前行的StatusId 為1,下一行的StatusId 為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);
這個查詢另外檢查兩個時間是否在同一日曆分鐘內行相等,確保它們屬於同一日曆分鐘。
以上是如何在 SQL Server 2008 中複製 SQL LEAD 和 LAG 功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!