2010-07-27 53 views
1

組行我有一個產品表是這樣的:MySQL的 - 在4的

Product name , Affiliate ID , ProductCode 
a, 1, 1 
b, 1, 2 
c, 1, 3 
d, 1, 5 
e, 1, 7 
f, 2, 4 
g, 2, 6 

我想回到前四周的產品從每一個會員ID。 'ProductCode'列表示添加產品的順序,因此可以使用此列對結果進行排序。但我不知道如何返回每個聯盟ID的前四個結果?如果我使用「組」功能,它只返回每個聯盟ID的一行。

回答

1

放眼例子此鏈接:

Within-group quotas (Top N per group)

正是你需要的。

SELECT AffiliateId, ProductCode 
FROM ( 
    SELECT 
     AffiliateId, ProductCode, 
     IF(@prev <> ID @rownum := 1, @rownum := @rownum+1) AS rank, 
     @prev := ID 
    FROM your table 
JOIN (SELECT @rownum := NULL, @prev := 0) AS r 
ORDER BY AffiliateId, ProductCode 
) AS tmp 
WHERE tmp.rank <= 4 
ORDER BY AffiliateId, ProductCode; 
+0

謝謝 - 是的,看起來像我需要的東西。然而,我收到以下錯誤: 查詢:SELECT'name',productId,image,affiliate_id,productCode FROM(SELECT'name',productId,image,affiliate_id,... 錯誤代碼:1064 您有一個在您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以在'@rownum:= 1,@rownum:= @ rownum + 1'附近使用正確的語法)AS排名, @prev:= ID FROM第5行的'Cu' 執行時間:00:00:00:000 轉換時間:00:00:00:000 總時間:00:00:00:000 – 2010-07-27 10:26:31

+0

@Joe你的mysql版本是什麼? – 2010-07-27 10:33:18

+0

MySQL版本5.0.91 – 2010-07-27 10:36:25