首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择IN的位置并按行数限制

选择IN的位置并按行数限制
EN

Stack Overflow用户
提问于 2014-09-18 13:24:45
回答 1查看 134关注 0票数 0

我有张像这样的桌子

代码语言:javascript
复制
 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所提取的行总数。

我的选择查询,

代码语言:javascript
复制
select userid, value, time from table where userid in (1,3) order by time desc;

此查询输出如下所示的所有值

代码语言:javascript
复制
 userid  |  value   | time
    
    1        0          1
    1        1          2
    1        2          3
    3        5          4
    3        10         7

我希望将每个userid的行数限制为两个,以获得如下所示的输出

代码语言:javascript
复制
   userid  |  value   | time
    
    1        0          1
    1        1          2
    3        5          4
    3        10         7

我尝试使用极限,但这限制了整个输出的行数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 13:29:59

您可以使用秩查询来限制每个用户的行数。

代码语言:javascript
复制
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行才会被返回。

Demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25913968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档