У меня есть пользовательская таблица (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
Как видите, мы разрешаем дублирование электронной почты, поэтому можно зарегистрировать несколько учетных записей с одним и тем же адресом электронной почты.
Теперь мне нужно выбрать все адреса, упорядоченные по дате создания, но без дубликатов . Это легко (я думаю)
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
Есть идеи? Производительность важна, потому что реальная база данных очень велика