2012-09-29 6 views
1

테이블 table1 (account, last_contact_date, insert_date), account 및 last_contact_date가 기본 키입니다. insert_date는 getdate()를 호출하여 추가 된 recored 시간으로 설정됩니다. 또한 table1을 업데이트하는 데 사용하는 임시 테이블 #temp (account, last_contact_date)가 있습니다.날짜를 기준으로 삽입하는 방법

여기 샘플 데이터이다 :

table1 
account last_contact_date insert_date 
1   2012-09-01   2012-09-28 
2   2012-09-01   2012-09-28 
3   2012-09-01   2012-09-28 

#temp 
account last_contact_date 
1   2012-09-27 
2   2012-09-27 
3   2012-08-01 

결과표 삽입 기간에 의존한다. 날짜 2012년 9월 28일 경우, 결과는 기본적 규칙이

table1 
account last_contact_date insert_date 
1   2012-09-27   2012-09-28 
2   2012-09-27   2012-09-28 
3   2012-09-01   2012-09-28 

날짜 2012년 9월 29일

경우는, 결과가

table1 
account last_contact_date insert_date 
1   2012-09-01   2012-09-28 
2   2012-09-01   2012-09-28 
3   2012-09-01   2012-09-28 
1   2012-09-27   2012-09-29 
2   2012-09-27   2012-09-29 

것 것 (1) 삽입 날짜가 같은 날인 경우 last_contact_date를 선택합니다. 그렇지 않으면 (2) last_contact_date가 현재 last_contact_date보다 늦으면 새 것을 삽입합니다.

이 삽입에 대한 쿼리는 어떻게 작성합니까?

답변

1

사실 삽입물이 아닙니다. 특정 로직을 기반으로하는 업데이트 또는 삽입입니다.

그래서 내가 권하고 싶은 것은 이것입니다.

모든 레코드를 새 임시 테이블에 덤프하십시오. 임시 테이블에 테이블 1의 레코드를 그대로 덤프합니다. #temp 계정의 레코드를 새 임시 테이블에 그대로 덤프하지만 insert_date 열을 현재 날짜로 설정합니다. 지금

#holding tank 
account last_contact_date insert_date 
1   2012-09-01   2012-09-28 
2   2012-09-01   2012-09-28 
3   2012-09-01   2012-09-28 
1   2012-09-27   2012-09-29 
2   2012-09-27   2012-09-29 
3   2012-08-01   2012-09-29 

을 표 1에서 모든 레코드를 삭제 :

그래서 새 임시 테이블은 다음과 같이 보일 것이다.

다음으로 새 레코드를 표 1에 삽입하십시오. GROUP을 사용하여 기록을 분류합니다. 이 예제 코드는 특정 조건에서 기본 키를 손상 시키지만 내 요점은 알 수 있습니다. 귀하의 필요에 맞게 그룹화 논리를 마사지하십시오.

Insert into Table1 
select 
    account, 
    max(last_contact_date), 
    insert_date 
from 
    #HoldingTank 
group by 
    account, insert_date 

제 의견으로는 이것이 유일한 방법입니다.

깨진 디자인이기 때문에 실제로 이런 상황이 발생하지 않을 것이라는 점 또한 매우 긍정적입니다. 이 데이터베이스 스키마에는 어떤 생각을해야합니다. 각 엔티티 및 이벤트를 자체 테이블에 저장하십시오. 내 제한된 지식을 바탕으로 Account_Contact_Attempts를 생각하고 있습니다.

+0

실제로 이것은 아마도 가장 빠른 방법 일 것입니다. 대안은 select, update 및 insert를 포함한 여러 쿼리를 수행하는 것입니다. –

+0

삽입 날짜가 다를 때까지 기다리면 오류가 발생합니다. 오류는 PRIMARY KEY 제약 조건 위반입니다. – GLP

+0

정확합니다. 나는 틀린 것을 읽었다. 그러나, 나는 당신을 위해 당신의 코드를 작성하는 것이 아닙니다. 개념은 의미합니다. 삭제, w/그룹 선택 및 삽입. 고유 한 2-colle PKeys –

관련 문제