MySQL实现Oracle的 rownumber over

select  *  from (  
	select 
		@rownum:=@rownum+1,
		if(@puid=base_tmp.user_id, @rank:=@rank+1,@rank:=1) as no,
		@puid:=base_tmp.user_id,
		base_tmp.*
	from (select * from tb_record  
				where user_id>0
				  and pass_time BETWEEN '2019-08-20 00:37:18' and '2019-08-20 11:29:11'
				order by user_id asc,record_id desc) base_tmp ,
		(select  @rownum :=0 , @puid := null ,@rank:=0) a 
) result  
where no=1 anddirection=1
  and user_id in  (SELECT user_id FROM v_setting) 

这个的效率不是很高,使用时根据具体情况比较,选择SQL写法

你可能感兴趣的:(mysql)