1. 程式人生 > 其它 >1285:@變數賦值

1285:@變數賦值

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;