Это беспокоит меня уже 2 дня, и я не могу разобраться с этим.
У меня есть таблица MySQL со следующей структурой:
CREATE TABLE `sales` (
`id` Int( 255 ) AUTO_INCREMENT NOT NULL,
`created` DateTime NOT NULL,
`user` VarChar( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`client` VarChar( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`status` VarChar( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
CONSTRAINT `unique_id` UNIQUE( `id` ) )
AUTO_INCREMENT = 1;
INSERT INTO `sales` ( `client`, `created`, `status`, `user`)
VALUES
( 'Google', '2019-05-06 00:00:00', 'active', 'john' ),
( 'Apple', '2019-05-06 00:00:00', 'active', 'john' ),
( 'Amazon', '2019-05-06 00:00:00', 'inactive', 'david' ),
( 'Apple', '2019-05-06 00:00:00', 'active', 'john' ),
( 'Amazon', '2019-05-07 00:00:00', 'active', 'john' ),
( 'Google', '2019-05-07 00:00:00', 'active', 'david' ),
( 'Apple', '2019-05-07 00:00:00', 'active', 'john' ),
( 'Amazon', '2019-05-07 00:00:00', 'inactive', 'david' ),
( 'Apple', '2019-05-07 00:00:00', 'active', 'john' );
Я пытаюсь достичь:
У пользователя может быть только один клиент в день,но иногда приложение отправляет несколько заявок из-за ошибки, которая была у нас за последние несколько месяцев, поэтому я хочу исключить ручную работу по очистке данных (экспортировать результаты в Excel и очистить, выполнив запрос, которыйигнорирует эти дубликаты (не удаляет их).
Возвращаясь к моим образцам данных:
+----+---------------------+-------+--------+----------+
| id | created | user | client | status |
+----+---------------------+-------+--------+----------+
| 1 | 2019-05-06 00:00:00 | john | Google | active |
| 2 | 2019-05-06 00:00:00 | john | Apple | active |
| 3 | 2019-05-06 00:00:00 | david | Amazon | inactive |
| 4 | 2019-05-06 00:00:00 | john | Apple | active |
| 5 | 2019-05-07 00:00:00 | john | Amazon | active |
| 6 | 2019-05-07 00:00:00 | david | Google | active |
| 7 | 2019-05-07 00:00:00 | john | Apple | active |
| 8 | 2019-05-07 00:00:00 | david | Amazon | inactive |
| 9 | 2019-05-07 00:00:00 | john | Apple | active |
+----+---------------------+-------+--------+----------+
Ожидаемые результаты после выполнения запроса должны быть:
+----+---------------------+-------+--------+----------+
| id | created | user | client | status |
+----+---------------------+-------+--------+----------+
| 1 | 2019-05-06 00:00:00 | john | Google | active |
| 2 | 2019-05-06 00:00:00 | john | Apple | active |
| 3 | 2019-05-06 00:00:00 | david | Amazon | inactive |
| 5 | 2019-05-07 00:00:00 | john | Amazon | active |
| 6 | 2019-05-07 00:00:00 | david | Google | active |
| 7 | 2019-05-07 00:00:00 | john | Apple | active |
| 8 | 2019-05-07 00:00:00 | david | Amazon | inactive |
+----+---------------------+-------+--------+----------+
Логика: В приведенном выше примере мы удаляем две повторяющиеся записи на основе дня, а не месяца и не года.
Что делает дублирующую запись: дублирующаяся запись - это когда две записи в один и тот же день имеют одинаковое значение для «клиента», «пользователь» и «статус».
В примере, Джон, 05-07-2019 дважды имеет Amazon в качестве клиента, но каждый имеет свой статус, поэтому мы не удаляем ни один иззаписи. Но у него также естьpple как клиент дважды, но оба статуса активны, это означает, что это дубликат, поэтому мы удаляем один из них.
Не уверен, ясно ли я это уточнил или нет, но моей последней попыткой было бы сказать это просто,Ежедневно мы удаляем записи, которые имеют одинаковые значения в клиенте, статусе и пользователе, если любой из этих трех не идентичен, то это не дубликат, поэтому мы храним обе записи.
Любая помощь будет оценена, потому что этосводит меня с ума!
Спасибо!