我有以下SQL Server查詢,我試圖從給定的Id獲取下一行和上一行。除非有兩個/更多的日期是相同的,否則所有的工作都很好,那麼我的邏輯就會崩潰。SQL Server從基於日期的表中獲取下一個前面的行
如果設置@currentId = 4那麼我回去ID 7的分組
(應該是ID 6)如果設置@currentId = 6,然後我回去ID 2(應該是ID 4 )未來
declare @t table (i int, d datetime)
insert into @t (i, d)
select 1, '17-Nov-2009 07:22:13' union
select 2, '18-Nov-2009 07:22:14' union
select 3, '17-Nov-2009 07:23:15' union
select 4, '20-Nov-2009 07:22:18' union
select 5, '17-Nov-2009 07:22:17' union
select 6, '20-Nov-2009 07:22:18' union
select 7, '21-Nov-2009 07:22:19'
--order that I want
select * from @t order by d desc, i
declare @currentId int; set @currentId = 4
--Get Prev
select TOP 1 * from @t where d > (select TOP 1 d from @t where i = @currentId order by d, i desc) order by d, i desc
--Get Next
select TOP 1 * from @t where d < (select TOP 1 d from @t where i = @currentId order by d desc) order by d desc
誰能幫我解決如何保證獲得基於給定ID的下一個/上行時,請注意,重要的是,我把這個順序,日期說明,ID ASC
非常感謝
編輯:應當指出的是,這將被用於SQL Server 2005的
克里斯感謝這個,我努力使這項工作作爲模式是不同的。我可以看到你的建議。 – Rippo 2009-11-20 09:34:37
與...不同?這應該與上面提供的示例表和數據一起工作:-)我認爲您需要將其適應於活動模式? – 2009-11-20 09:38:56
我的錯誤 - 在我的SQL中有一個拼寫錯誤(在我測試它之後,爲我編譯SQL堆棧溢出以清理它)。它現在會工作......! – 2009-11-20 09:40:23