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写法