微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分组依据,但指定每个分组ID的行数

如何解决分组依据,但指定每个分组ID的行数

| 我有以下内容
id | name  | Book Read        | Date Read
1    Maria   Dogs love cats     12/31/2008
1    Maria   Cats and Dogs      12/31/2007
1    Maria   Cowboys            12/31/2006
2    Tom     Cowboys            12/31/2008
2    Tom     Indians            12/31/2005
2    Tom     Cats and Dogs      12/31/2003
3    Harry   Raining hard       12/31/2005
3    Harry   Cats and Dogs      12/31/2002
3    Harry   Indians            12/31/2001
如果我执行“ SELECT * FROM table GROUP BY id”,则会得到:
id | name  | Book Read         | Date Read
1    Maria   Dogs love cats      12/31/2008
2    Tom     Cowboys             12/31/2008
3    Harry   Raining hard        12/31/2005
但是,如何为每个人获得前两本书?即:
id | name  | Book Read         | Date Read
1    Maria   Dogs love cats      12/31/2008
1    Maria   Cats and Dogs       12/31/2007
2    Tom     Cowboys             12/31/2008
2    Tom     Indians             12/31/2005
3    Harry   Raining hard        12/31/2005
3    Harry   Cats and Dogs       12/31/2002
    

解决方法

        假设您有一个自动递增字段,在我的示例中称为i
select * from table as t1
where (select count(*) from table as t2
       where t1.id = t2.id and t2.i < t1.i) <2
这是另一种选择
select tmp.i,tmp.id,tmp.name,tmp.book_read
from (
  select 
    id,i,name,book_read,if( @prev <> id,@r:=1,@r:=@r+1 ) as rank,@prev := id
  from table as t
  join (select @r:=null,@prev:=0) as rn
  order by t.id,t.i
) as tmp
where tmp.rank <= 2
order by i,id; 
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。