根据组从表中获取前N行

时间:2014-08-17 08:25:22

标签: mysql sql greatest-n-per-group

我的Customer_Record表包含以下列

customer_id | item_id | item_count
1            2           10
1            3           9
1            4           2
1            5           2
2            2           5
2            4           1
2            8           2
4            1           2            
4            5           3
4            8           7

现在我希望在item_count的基础上获得每个客户的前2项(items_id)。 请帮我弄明白。

结果如: -

customer_id | item_id | item_count
1            2           10
1            3           9
2            2           5
2            4           1
4            1           2            

1 个答案:

答案 0 :(得分:1)

对于mysql,您可以使用排名查询来获得每组的最高结果

SELECT t.customer_id,
t.item_id,
t.item_count
FROM (
SELECT t.*,
@rank:= CASE WHEN @group = t.customer_id THEN @rank +1 ELSE 1 END rank ,
@group:= t.customer_id 
 FROM
t
JOIN (SELECT @group:='',@rank:='') t1
ORDER BY t.customer_id ,item_count  DESC
) t WHERE t.rank <=2

Fiddle Demo