我有张像这样的桌子
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 where,我希望选择userd、value和time,但限制为每个userid所提取的行总数。
我的选择查询,
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我希望将每个userid的行数限制为两个,以获得如下所示的输出
userid | value | time
1 0 1
1 1 2
3 5 4
3 10 7我尝试使用极限,但这限制了整个输出的行数。
发布于 2014-09-18 13:29:59
您可以使用秩查询来限制每个用户的行数。
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条记录一样,如果用户2有2条记录,那么用户2的排名将为1,2。在父查询中,我只是根据仅返回的结果对记录进行过滤,对于每个用户,只有2行的秩小于2,只有1和2行才会被返回。
https://stackoverflow.com/questions/25913968
复制相似问题