У меня есть таблица mysql, в которой хранятся журналы обслуживания для датчиков. Я хотел бы спроектировать запрос, который находит случаи, когда данный датчик был отремонтирован/сохранен по той же причине. (. Периодическая задача искатель)Поиск дубликатов записей в mysql на основе битмаски
Моей таблица (упрощенная) выглядит следующим образом:
id name mask
== ==== ====
11 alpha 0011
12 alpha 0010
13 alpha 0100
14 beta 0001
поле маски битовый, где каждая позиция представляет собой особый вид ремонта. Мне удалось успешно выяснить, как сравнить битмаску (per this question), но попытка включить ее в запрос оказывается более сложной, чем я думал.
Учитывая приведенные выше примеры образцов, применяются только идентификаторы 11 и 12, так как они оба имеют 1
в третьем положении маски.
Вот что я пытался, и почему он не работает:
1. Никогда не заканчивается ...
Этот запрос кажется бежать навсегда, я не думаю, что он работает так, как Я хочу.
SELECT t1.id, t1.name
FROM data t1
LEFT OUTER JOIN data t2
ON (CONV(t1.mask,2,10) & CONV(t2.mask,2,10) > 0)
GROUP BY t1.name
HAVING COUNT(*) >1;
2. Неполное запрос ...
Я думал о создании вида, только разобрать датчики, которые на самом деле имеют более чем одну запись в таблице. Я не был уверен, куда идти отсюда.
SELECT COUNT(t1.name) AS times, t1.name, t1.id, t1.mask
FROM data AS t1
GROUP BY t1.name ASC
HAVING times > 1;
Любые предложения по этому поводу?
В идеале это будет отношение таблицы к таблице, но перестройка структуры БД на данном этапе невозможна. – JYelton