我有一个包含以下数据的用户表(MySQL)
id email creation_date
1 bob@mail.com 2011-08-01 09:00:00
2 bob@mail.com 2011-06-24 02:00:00
3 john@mail.com 2011-02-01 04:00:00
4 john@mail.com 2011-08-05 20:30:00
5 john@mail.com 2011-08-05 23:00:00
6 jill@mail.com 2011-08-01 00:00:00
如您所见,我们允许电子邮件重复,因此可以使用相同的电子邮件地址注册多个帐户。 现在我需要选择creation_date排序的所有地址,但没有重复项。这很容易(我认为)
SELECT * FROM (SELECT * FROM users ORDER BY creation_date) AS X GROUP BY email
预期结果:
id email creation_date
2 bob@mail.com 2011-06-24 02:00:00
6 jill@mail.com 2011-08-01 00:00:00
3 john@mail.com 2011-02-01 04:00:00
但是我还需要选择所有其他地址,即。第一个查询的结果中不存在的所有内容。 允许重复。
预期结果:
id email creation_date
1 bob@mail.com 2011-08-01 09:00:00
4 john@mail.com 2011-08-05 20:30:00
5 john@mail.com 2011-08-05 23:00:00
有什么想法吗?性能很重要,因为真正的数据库非常庞大
答案 0 :(得分:0)
SELECT * FROM a
FROM users a
LEFT JOIN (SELECT email, MIN(creation_date) as min_date GROUP BY email)x ON
(x.email = a.email AND x.min_date=a.creation_date)
WHERE x.email IS NULL
答案 1 :(得分:0)
在SQL服务器中,我们将使用排名来执行Select语句。
以下是一些MYSQL示例: How to perform grouped ranking in MySQL
http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/
我希望这会有所帮助。