2016-07-27 45 views

回答

0

最简单的方法可能是使用变量:

select ll.* 
from (select ll.*, 
      (@rn := if(@ln = lastname, @rn + 1, 
         if(@ln := lastname, 1, 1) 
         ) 
      ) as rn 
     from longlist ll cross join 
      (select @ln := '', @rn := 0) params 
     order by lastname 
    ) ll 
where rn <= 6; 
+0

其中'姓氏'是列名? – jairbow

+0

@jairbow。 。 。是。 –

+0

我真的希望有一个内置的方式来做到这一点,但这种方法正是我所要求的。 – jairbow

0

有很多方法可以做到你想要什么,他们中的一些非常复杂的。任何确定性方法将为rank the rows。你的任务是加入表格本身,并决定什么使一个“史密斯”比另一个少。

一旦你有排名的名字,你可以再次加入他们的表(或使用where exists)和where rank < 7或其他什么。

相关问题