SQL, проблема с несколькими адресами электронной почты - PullRequest
0 голосов
/ 01 августа 2011

У меня есть пользовательская таблица (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

Есть идеи? Производительность важна, потому что реальная база данных очень велика

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

На сервере SQL мы выполняем оператор Select, используя ранг.

Вот несколько примеров MYSQL: Как выполнить групповое ранжирование в MySQL

http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/

Надеюсь, это поможет.

0 голосов
/ 01 августа 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...