select min(log_id) start_id,max(log_id) end_id from ( select log_id,CASE WHEN @id = log_id - 1 THEN @num:= @num ELSE @num:= @num + 1 END num, @id:= log_id from Logs, (select @id:=NULL,@num :=0) a ) b group by num;
思路详解:
第一步:@num=0,@id=NULL
第二步:取第一行数据,log_id=1,Null=1-1时不成立的,那么num=1,id=log_id=1
第二步:取第二行数据,log_id=2,1=2-1成立,那么num=1,id=log_id=2
第三步:取第三行数据,log_id=3,2=3-1成立,那么num=1,id=log_id=3
第四步:取第四行数据,log_id=7,3=7-1不成立,那么num=2,id=log_id=7
第五步:取第五行数据,log_id=8,7=8-1成立,那么num=2,id=log_id=8
第六步:取第六行数据,log_id=10,8=10-1不成立,那么num=3,id=log_id=10
方法二:
# select min(log_id) start_id,max(log_id) end_id # from # ( # select log_id,log_id-row_number() over (order by log_id) r # from Logs # ) a # group by r;