MySQL按行数选择WHERE IN和LIMIT

时间:2014-09-18 13:24:46

标签: mysql mysqli mysql-workbench mysql-error-1064

我有一张看起来像这样的表

 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但限制了整个输出的行数。任何建议或指示都将深受赞赏。

1 个答案:

答案 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,将返回

Demo