2013-12-22 3 views
2

데이터 세트에 중복 레코드가 있습니다. 동일한 연락처에 대해 번 이상 중복 될 수 있습니다.CSV 파일에서 중복 레코드 제거 및 병합

중복 레코드를 제거하고 가능한 최대 필드가있는 각 이름에 대한 단일 레코드를 작성하려면 어떻게합니까?

샘플 입력 파일 :

FN, LN, phone1,  phone2,  email,  city 
Matt, x,  9800000000,   ,    , NYC 
Matt, ,  9800000001, 8822334490,    , 
Matt, x,  9845, 9800000000,    , 
Matt, ,  9800000000,   , [email protected], NYC 
Matt, x,    , 9845, [email protected], NYC 
Matt, x,  9845, 9800000000,    , NYC 
Matt, y,  9800000001,   ,    , NYC 
kyle, z,  8759235755,   ,    , NJ 

샘플 출력은 :

FN, LN, phone1,  phone2, email,   city 
Matt, x, 9800000000, 9845, [email protected], NYC 
Matt, y, 9800000001, 8822334490,    , NYC 
kyle, z, 8759235755,   ,    , NJ 
+0

실제로 필드 사이에 공백 있는가, 또는 당신은 명확성을 위해 추가 않은 : 당신은 실행하여이를 수행 할 수 있습니까? 또한 병합 된 레코드를 만드는 규칙은 명확하지 않습니다. "각 이름에 대해 하나의 레코드"라고 말했지만 두 개의 "매트"가 있고 'Matt, y'의 결합 된 레코드에는 존재하지 않는 내용이 있습니다. 그를 샘플 입력에서. –

+0

좋은 질문 ... +1 –

+0

@TimPietzcker : 명확성을 위해 빈 칸에 공백을 추가했습니다. first_name은 필수 입력란이며 나머지는 모두 선택 입력란이며 동일한 연락처에도 둘 이상의 중복이있을 수 있습니다. – user3127188

답변

0

은 find_or_create_by

속성을 가진 레코드가 존재하는지 여부를 find_or_create_by 방법을 확인 봤어. 그렇지 않으면 create가 호출됩니다. 예를 보도록하겠습니다.

'Andy'라는 클라이언트를 찾고 싶지 않다고 생각되면, 생성하십시오.

Client.find_or_create_by(first_name: 'Andy') 
# => #<Client id: 1, first_name: "Andy", orders_count: 0, locked: true, created_at: "2011-08-30 06:09:27", updated_at: "2011-08-30 06:09:27"> 

+0

이 방법은'ActiveRecord'에서 사용할 수 있습니다. 레일스가 보이지 않습니다. –