다음 SQL Server 쿼리가 있는데 주어진 ID에서 다음 행과 이전 행을 가져 오려고합니다. 같은 날짜가 두 개 이상 있지 않으면 모든 작품이 훌륭합니다. 그런 다음 내 논리는 무너집니다. 당신이 다음 @currentId = 4를 설정하면SQL 서버는 날짜를 기준으로 테이블에서 다음 행을 가져옵니다.
은 당신이 설정 한 경우 ID 7은 이전
에 대해 (이 아이디 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
사람이 내가이 순서, 날짜 제품 설명, 아이디 ASC
를 유지하는 것이 중요합니다, 나에게 주어진 ID를 기반으로 다음/이전 행을 얻을 보장하는 방법을 작업 할 수 있도록 할 수 옆에많은 감사
편집이 : 그것은이 2005
Chris 님,이 점에 대해 감사드립니다. 스키마가 다르기 때문에이 작업을 수행하기 위해 애 쓰고 있습니다. 나는 네가 제안하고있는 것을 볼 수있다. – Rippo
다른 ... ...? 위에서 제공 한 예제 테이블과 데이터와 함께 작동해야합니다 :-) 이것을 라이브 스키마에 적용해야한다고 가정합니다. –
내 실수 - 내 SQL에 오타가 있었다. (다른 곳에서 테스트 한 후에 정리할 수있는 stackoverflow에서 SQL을 편집하는 역할을한다.) 그것은 지금 작동 할 것이다 ...! –