2013-06-11 4 views
0

У меня есть сложная проблема, о которой я бы не прочь помогать, я сделал некоторые успехи, используя запросы, которые я здесь и где-то еще, но сейчас серьезно смотрю.Сочетание почти идентичных строк в 1

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

Title Forename Surname Address1  Postcode Phone Age Income Ownership Gas 

Mrs D   Andrews 122 Somewhere BH10  123456 66-70   Homeowner 
Ms Diane  Andrews 122 Somewhere BH10  123456   £25-40    EDF 

и делая один ряд вдоль линий

Title Forename Surname Address1  Postcode Phone Age Income Ownership Gas 

Mrs Diane  Andrews 122 Somewhere BH10  123456 66-70 £25-40 Homeowner EDF 

У меня есть более 127 миллионов записей, большинство дублированные с подобным рисунком, но нет четкой логики, как было доказано, когда я добавил поле идентификатора. У меня также есть более 90 столбцов, чтобы рассмотреть, так что это немного работы! Не существует четкой картины для данных, поэтому я думаю, что у меня может быть огромный случай case, чтобы попытаться подняться.

Используя следующий код, я могу получить достойное начало только при возврате полного имени, но с образцом данных - попытка сравнить поля между строками выглядит следующим образом.

SELECT c1.* 
FROM 
    Mailing c1 
    JOIN 
    Mailingc2 ON c1.Telephone1 = c2.Telephone1 AND c1.surname = c2.surname 
WHERE 
    len(c1.Forename) > len(c2.Forename) 
AND c2.over_18 <> '' 
AND c1.Telephone1 = '123456' 

У кого-нибудь есть какие-либо указания относительно того, как я должен прогрессировать, пожалуйста? Я открыт для обсуждения и идей ...

Я использую SQL 2005 и извиняюсь заранее, если пометка повсюду!

Приветствия,

Jon

+1

. , Существует причина, по которой сторонние поставщики и программное обеспечение существуют для согласования домашних хозяйств и имен. Если у вас есть база данных с 120 миллионами строк, ваша компания должна инвестировать в реальное решение этой проблемы. SQL не является адекватным решением. –

+0

Привет, Гордон. Я работаю в хранилище данных, мы стремимся разрабатывать такие решения внутри компании. У нас есть внешние источники, но это также является ценным процессом обучения для всех. – JonTout

ответ

0

Будет ли это работать, если предположить, что все лица с той же фамилией и номером телефона (это делают все люди имеют телефон?) И тот же человек?

INSERT INTO newtable <fieldnames> 
SELECT lastname,phone,max(field3),max(field4).... 
FROM oldtable 
GROUP BY lastname,phone 

Но это рухнет Джон Смит и Джек Смит, живущие вместе в одном лице.

Возможно, вам стоит подумать о том, чтобы передать его в поточную камеру ввода данных, где вы предварительно обработали данные. :-)

И/или быть готовым взять флэк за ошибочное соединение.

Возможно добавить что-то вроде «Для того, чтобы улучшить наш зеленый след, мы сливались х списки на ваш адрес вместе. Если вы хотите отдельные рассылки, пожалуйста, свяжитесь с нами»

+0

Спасибо Leif - (я также присоединяюсь к первой строке адреса) Мы используем номер телефона почти как уникальный идентификатор - план состоит в том, что из таблицы холдинга будет перенесен только один контакт на адрес и, вероятно, использовать это как ПК. Думаю, учитывая качество данных, количество возвращаемых чистых записей значительно уменьшится. Я возьму флак, но я хочу свести к минимуму боль. – JonTout

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