только дубликаты записей, отфильтрованные по созданному Mysql Query - PullRequest
0 голосов
/ 25 февраля 2019

Пытаюсь извлечь записи, используя запрос select с предложением where, идентификаторы дублируются, затем я хочу отфильтровать их по полю createdAt.

, пока выполняю запрос ниже и получаю результат, подобный этому:

select * from security_development.user_requests
where
fully_approved = 1 and user_request_role=4

Пожалуйста, найдите результаты

createdAt           User_request_name fully_approved user_request_role
2019-02-22 18:57:08  dealerAdmin        1               4
2019-02-24 08:57:08  ask1               1               4
2019-02-25 12:20:22  dealerAdmin        1               4

Если я пытаюсь избежать только дубликата User_request_name, используя max(creaTed_at) в качестве подзапроса,

select * from security_development.user_requests
where fully_approved =1 and user_request_role=4
created_at = 
(select max(creaTed_at) from security_development.user_requests group by user_request_name having count(user_request_name) > 1 )

затем получаю следующий результат

createdAt           User_request_name fully_approved user_request_role
2019-02-25 12:20:22  dealerAdmin        1               4

Но я ожидаю следующих результатов

createdAt           User_request_name fully_approved user_request_role
2019-02-24 08:57:08  ask1               1               4
2019-02-25 12:20:22  dealerAdmin        1               4

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете использовать коррелированный подзапрос

select t1.* from security_development.user_requests t1
where
fully_approved = 1 and user_request_role=4
and createdAt=( select max(createdAt) 
              from security_development.user_requests t2
                where t1.User_request_name=t2.User_request_name)
0 голосов
/ 25 февраля 2019

Совсем не так, как вопрос:

Чтобы удалить существующие дубликаты с сохранением последней версии:

DELETE t1 FROM user_requests t1
INNER JOIN user_requests t2 
WHERE t1.createdAt < t2.createdAt AND t1.user_request_name = t2.user_request_name

Для предотвращения вставки дубликата User_request_name:

Alter table user_requests
add unique key (User_request_name);
...