У меня есть таблица, например, так:Показаны все дубликаты, бок о бок, в MySQL
Table eventlog
user | user_group | event_date | event_dur.
---- ---------- --------- ----------
xyz 1 2009-1-1 3.5
xyz 2 2009-1-1 4.5
abc 2 2009-1-2 5
abc 1 2009-1-2 5
Обратите внимание, что в приведенных выше данных выборок, единственное надежное является дата и пользователь. Посредством более чем 90% моих вины, я смог разрешить пользователям дублировать свои ежедневные записи. В некоторых случаях дубликаты были предназначены для обновления их продолжительности, в других это была их попытка изменить user_group, с которой они работали с этим днем, а в других случаях и то, и другое.
К счастью, у меня есть довольно сильная идея (так как это обновление старой системы), записи которой верны. (В принципе, все это произошло как попытка бесшовного слияния старой БД с новой БД).
К сожалению, у меня есть более или менее делать это вручную, или риск потери данных, которые существуют только на одной стороне, а не другой ....
Короче говоря, я пытаюсь выяснить, правильный запрос MySQL для возврата всех записей, которые содержат более одной записи для пользователя в любую заданную дату. Я боролся с GROUP BY и HAVING, но лучшее, что я могу получить, это список одного из двух дубликатов, за один дубликат, что было бы здорово, если бы я точно знал, что это было неправильно.
Вот ближайший я пришел:
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(user) > 1
ORDER BY event_date, user
Любая помощь с этим было бы чрезвычайно полезно. Если нужно, у меня есть список пользователей/дат для каждого набора дубликатов, поэтому я могу идти вручную и удалять все 400 из них, но я бы скорее их всех увидел сразу.
Спасибо!
У меня была аналогичная проблема, и работал вокруг него, выбрав выход из группы по запросу (например, как у вас) в новую таблицу, а затем отбрасывая оригинал данные. –
Это может помочь, если я СОЮЗЬ их обратно вместе. Но я должен пройти один за другим, чтобы определить, что сохранить и который удалить. – Anthony