MySql Get top n in each group -
i wrote query :
select title, userid, created_at, devicecode, streamtimeinsecond ( select title, userid, created_at, devicecode, streamtimeinsecond, @userid_rank:=if(@current_userid = userid, @userid_rank + 1, 1) userid_rank, @current_userid:=userid viewforfirstfivemovies order userid, streamtimeinsecond desc ) ranked userid_rank<=5; in query trying 5 titles viewed each userid present in database. problem: getting more 5 records few users.
kindly me problem.
mysql not guarantee order of evaluation of expressions in select. reason, should set inter-related variables in single expression.
i write as:
select title, userid, created_at, devicecode, streamtimeinsecond (select title, userid, created_at, devicecode, streamtimeinsecond, (@userid_rank := if(@current_userid = userid, @userid_rank + 1, if(@current_userid := userid, 1, 1) ) ) userid_rank, viewforfirstfivemovies cross join (select @current_userid := 0, @userid_rank := 0) params order userid, streamtimeinsecond desc ) ranked userid_rank <= 5; in addition, should set variables in same statement.
Comments
Post a Comment