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
これらはテーブル内の唯一の2列ですか?私はあなたが注文を指示するために何かを必要とするだろうと思う。クエリでは、5と5が10より前に発生する前に0が起きたことを知ることはできません。 –
@Aaron:私が持っている他の列はeventTime..Nope 21はtypoではありません... difftimeが20より大きい場合、カウントを増やします。 – SaiBand
21は、元のデータでは、20は時間を表していませんか?セッション番号または時間を増分しますか?私はここではっきりと失われている。 –