create table #t
(
id int,
Diff int,
SessionNumber int
)
insert into #t(id, diff)values(1, 0)
insert into #t(id, diff)values(1, 5)
insert into #t(id, diff)values(1, 10)
insert into #t(id, diff)values(2, 0)
insert into #t(id, diff)values(2, 21)
insert into #t(id, diff)values(2, 5)
Select ROW_NUMBER() over(order by Id) as RowID, * into #Temp1 from #t
Declare @diff int
Declare @RowId int
Declare @Previous int
Declare @NewValue int
DECLARE @Cur CURSOR SET @Cur = CURSOR FOR select RowId, diff from #Temp1
OPEN @Cur
FETCH NEXT FROM @Cur INTO @RowId, @diff
WHILE @@FETCH_STATUS = 0
BEGIN
if(@RowId = 1)
Begin
Update #Temp1 Set SessionNumber = 1 Where rowid = 1
Set @Previous = @Diff
Set @NewValue = 1
End
Else
Begin
if(@Diff - @Previous > 20)
Begin
Set @Previous = @Diff
Set @NewValue = @NewValue + 1
Update #Temp1 Set SessionNumber = @NewValue Where rowid = @RowId
End
else
Update #Temp1 Set SessionNumber = @NewValue Where rowid = @RowId
End
FETCH NEXT FROM @Cur INTO @RowId, @diff
END
CLOSE @Cur
DEALLOCATE @Cur
select * from #temp1
drop table #t
drop table #temp1
테이블에이 두 열만 있습니까? 주문을 지시하기 위해 뭔가 다른 것이 필요할 것 같습니다. 쿼리는 0이 5와 5가 발생하기 전에 발생한다는 것을 알 수 없습니다. 또한 예상 출력에서 오타가 21 개입니까? –
@Aaron : 내가 가지고있는 다른 컬럼은 eventTime..Nope 21은 오타가 아닙니다 ... difftime이 20보다 크면 카운트를 증가시킵니다. – SaiBand
21은 카운트 σ를 나타내고, 원래 데이터에서 20은 시간을 나타내지 않습니까? 세션 번호 또는 시간을 늘리시겠습니까? 나는 분명히 여기에서 길을 잃었다. –