我有一个简单的用户记录表。允许一个电子邮件地址有多个条目。我现在想要创建一个将返回所有记录的查询,但将重复条目的数量限制为一组数字,例如每个电子邮件地址5个。
我将使用此查询的最终结果来创建新表。
我唯一想到的是使用PHP并选择一个唯一的电子邮件地址列表,然后我会在循环中使用此列表来查询表并将其限制为5,但我在表中有大约65,000个独特的电子邮件,总记录约284k行。
我有没有办法在MySQL中完成这项工作?
HERE是表结构。
first_name, last_name, email
John, smith, js@email.com
john, smith, js@email.com
John, smith, js@email.com
john, smith, js@email.com
Jane, smith, jbs@email.com
jane, smith, jbs@email.com
Jane, smith, jbs@email.com
john, smith, js@email.com
我想获得一个返回相同记录的查询,但将重复项限制为我可以更改的参数。在上面的例子中,假设允许最多2个重复。我想得到
first_name, last_name, email
John, smith, js@email.com
john, smith, js@email.com
Jane, smith, jbs@email.com
jane, smith, jbs@email.com
希望这可以澄清一点。
感谢。
答案 0 :(得分:0)
以这种方式试试
SELECT user_id, first_name, last_name, email
FROM
(
SELECT user_id, first_name, last_name, email,
(
SELECT 1 + COUNT(*)
FROM users
WHERE email = u.email
AND user_id < u.user_id
) rnum
FROM users u
) q
WHERE rnum <= 2 -- change 2 to a number of duplicates you need
ORDER BY email, user_id
这是 SQLFiddle 演示