2012-03-28 1 views
0

This question 내가 수행하고 싶은 작업은 거의 수행되지만 내 테이블은 더 복잡하고 기본 키가 없습니다. 나는 또한 t1과 t2가 무엇을 의미하는지에 대한 최고의 답을 이해하지 못한다. 이 대답이 나에게도 해당된다면 누군가 코드를 설명해 주시면 감사하겠습니다.중복 레코드 중 첫 번째를 유지하고 나머지는 삭제하십시오.

나는 클라이언트에 대한 정보와 그들이 보유한 정책을 포함하는 몇 달짜리 테이블을 가지고 있습니다. 모든 클라이언트에는 고유 한 정책 ID가 있지만 여러 정책을 가질 수 있으므로 동일한 정책 ID로 여러 레코드가 생성됩니다. 중복 레코드는 모든 필드에서 완전히 다를 수도 똑같을 수도 있습니다.

내 용도로는 각 정책 ID마다 하나의 레코드 만 보관하고 싶습니다. 이상적으로 기록은 가장 높은 연령 인 인 기록이지만 너무 복잡 할 경우에는 필요하지 않습니다. 해당 정책 아이디의 최대 나이를 가진 레코드가 두 개 이상있을 수 있습니다. 그러면 어떤 아이디가 유지되는지는 중요하지 않습니다.

동일한 정책 ID로 두 개의 레코드를 보관할 경우가 있기 때문에 기본 키를 만들지 않으므로 직접 코드를 수정합니다. 또한 10+ 테이블로 작업하기 때문에 다른 테이블을 만들고 싶지 않습니다. 누군가 first()을 사용하여 제안했지만 쿼리에 통합하는 방법을 모르겠습니다.

추가 정보가 필요하면 알려주세요. 미리 도움을 주셔서 감사합니다. 내 질문이 조금 비현실적처럼

1

좋아 ========= UPDATE 번호는, 보이는, 그래서 나는 일련 번호 기본 키를 추가합니다. 어떻게 진행하나요? 이 라인에

+2

당신은 정말 그것이 너무 쉽게 하나의 레코드를 식별하게하고 DUPS를 삭제 도움이 같은 기본 키를 추가하는 것을 고려한다. 프라이 머리 키를 가지고 있다고해서 여전히 dup을 가질 수 없다는 것을 의미하지는 않습니다. –

+0

나는 당신이 무언가에 굴복해야한다고 생각합니다. 새 테이블을 작성해야하거나 고유 한 키를 추가해야합니다. – Fionnuala

답변

3

뭔가 :

DELETE Policies.* 
FROM Policies 
WHERE Policies.ID Not In (
    SELECT TOP 1 id 
    FROM policies p 
    WHERE p.policyid = policies.policyid 
    ORDER BY createdate DESC, id) 
+1

내부 괄호'SELECT' 문을 독자적으로 실행 해 보았습니다. 정책 값 .PolicyID의 매개 변수 값을 입력하라고했습니다. 내가 당신의 코드를 제대로 이해하고 있는지 확인할 수 있습니까? ID = autonumber 기본 키. 정책 = 테이블; P = 정책 테이블. 두 번째 마지막 줄은 항상 사실일까요? 또한 내부 브래킷은 하나의 레코드 만 출력합니다. – Emily

+1

이 아이디어는 복제 할 수있는 텍스트에 언급 된 정책 ID와 새 자 동 번호 인 ID라는 두 개의 ID를 사용합니다. 내부 브래킷은 끝내기를 원하는 정책 ID 당 하나의 레코드를 출력합니다. 나는 샘플 테이블로 테스트했다. – Fionnuala

+1

Ohhhh ok 나의 사과, 나는 단지 코드를 이해했다. 30k 레코드가있는 테이블에서 테스트를했습니다. 작동하는 것 같습니다! 고마워! 마지막으로 하나의 질문이지만 쿼리를 실행하는 데 꽤 오래 걸렸습니다. 정상입니까? 나는 내 테이블 중 하나에 900k 레코드가 있기 때문에 걱정입니다. – Emily