我有一张看起来像这样的表
userid | value | time
1 0 1
1 1 2
1 2 3
3 5 4
4 6 5
1 9 6
3 10 7
在查询中使用select我想要选择userd,value和time但是限制为每个用户标识提取的行总数
我的SELECT查询,
select userid, value, time from table where userid in (1,3) order by time desc;
此查询输出所有值,如此
userid | value | time
1 0 1
1 1 2
1 2 3
3 5 4
3 10 7
我想要将每个用户ID的行数限制为两个以获得类似的输出
userid | value | time
1 0 1
1 1 2
3 5 4
3 10 7
我尝试使用limit但限制了整个输出的行数。任何建议或指示都将深受赞赏。
答案 0 :(得分:0)
您可以使用排名查询来限制每个用户的行数
select userid,
value,
`time`
from (
select *,
@r:= case when @g = userid then @r + 1 else 1 end row_num,
@g:=userid
from test t
cross join (select @g:= null,@r:=0) t1
where userid in (1,3)
order by userid,value,`time` desc
) t2
where row_num <= 2
以上查询将给出同一用户的每条记录的排名,例如用户1有3条记录,它们将被分配为1,2,3如果用户2有2条记录,则用户2的排名将为1,2父查询我只是根据只返回结果的等级过滤记录,其中等级为小于等于2的每个用户只有2行,等级为1,将返回