2015-05-06 1 views
1

Это мой текущий запрос для поиска дубликатов телефонных номеров.Дубликаты в MYSQL на основе даты и статуса

SELECT 
    id, cust_num, entry_date 
FROM 
    nums 
GROUP BY 
    cust_num 
HAVING 
    count(*) >= 2 
ORDER BY 
    id 
DESC 

Однако теперь я хочу обновить их все за один раз, исходя из критериев.

Я только хочу, чтобы обновить более новые с более высокими идентификаторами, чем оригинал. И только если у них определенный статус.

Вот пример, что я хотел бы обновить на основе списка дубликатов вытащил из базы данных.

ID | Num | date | status 
    1 555 Sep-12 NEW (this row wouldnt update first instance of 555) 
    33 555 Oct-12 NEW (this row would update, duplicate with NEW as status) 
    42 333 Dec-12 NEW (this row wouldn't update first instance of 333) 
    5 555 Jan-13 ACTIVE (this row wouldnt update, duplicate but wrong status) 
    66 333 Feb-14 NEW (this row would update, duplicate with NEW as status) 
    6 555 Jan-13 NEW (this row would update, duplicate with NEW as status) 
    77 333 Mar 15 ACTIVE (this row wouldnt update, duplicate but wrong status) 

Таким образом, реальный вопрос, что запрос будет использовать, чтобы вывести все дубликаты, как это, а затем обновить их в зависимости от их статуса.

+0

не переживайте я получил вас на этом. собираюсь пойти настроить скрипку ... stand by –

ответ

0
UPDATE nums n SET ... WHERE n.status='NEW' AND (select count(*) from nums where num = n.num and id < n.id and status = 'NEW') > 0; 

Добавить в свой оператор SET для того, что вы хотите обновить.

+0

Я не вижу, как это вообще помогает. Может быть, это глупо. Где находится ГРУППА. Как он найдет дубликаты ??? – KyleK

0

Вот выбор. и ссылку на статус fiddle

select * from mytable as m where `status` = 'NEW' and exists 
    (select * from mytable as mm where mm.`id` < m.`id` and mm.`num` = m.`num`) 

Обновление до Обновлено

update mytable as m set m.`status` = 'UPDATED' where `status` = 'NEW' and exists 
(select * from mytable as mm where mm.`id` < m.`id` and mm.`num` = m.`num`) 
+0

@KyleK Это работает для вас? –

Смежные вопросы