Table : Prospects
ID | ContactNumber | Datekey |
... |
1 | C10000 | 20130601 |
|
2 | C10001 | 20130601 |
|
| ... | |||
Table: Interaction
ID | ContactNumber | InteractionType | Datekey | ... |
1 | C10000 | 20130101 |
| |
2 | C10000 | SAMPLE | 20130201 |
|
| 3 | C10000 | 20130301 | ||
| 4 | C10000 | 20130401 | ||
| 5 | C10000 | 20130501 | ||
| 6 | C10000 | QUOTE | 20130601 | |
| 7 | C10000 | CONTRACT | 20130701 | |
| ... | ||||
Datekey는 두테이블 모두 int로 저장되어 있고 yyyymmdd형식 입니다.
제가 만들고 싶은 쿼리는...
Prospects의 데이터를 같은 ContactNumber를 가진 Interactions의 데이터와 조인하는데
Prospect의 날짜(datekey)보다 작은 6개월 내의 모든 Interaction를 조인하고 싶습니다.
(그니까 제가 적어놓고도 왜이리 설명을 못하겠는지...제 머리를 쥐어뜯고 있습니다...죄송합니다.)
위의 데이터에서 조건에 따르면
Prospects 1번과 Interactions의 1번부터 6번까지가 조인되어야합니다.
SELECT pc.*
, ci.*
FROM Fact_ProspectCIO pc
JOIN Fact_ContactInteractions ci
ON pc.ContactNumber = ci.ContactNumber
-- datekey 조건을 줘야 되는데... 모르겠습니다ㅠㅠComment 1
-
블랙조
2013.07.24 10:34


참고만 하세요...^^ between join 쓰면 될듯 합니다.
select * from
Prospects a
inner join Interaction b
on (a.ContactNumber = b.ContactNumber and b.DataKey between a.DataKey - 0501 and a.DataKey)
where a.ContactNumber = 'C10000'
Interaction 에 2012년12 월달 정보가 있고 예를 들어 8개월전에꺼 모두 조인할려면 위와 같은 방식으로 하면 안나올거고요
DataKey 를 smalldatetime 으로 가져갈 수 있다면(년월일 정확도) 컬럼 타입을 변경하고
조인을 다음과 같이 작성하시면 어떨까요?
select * from
prospects a
inner join interaction b
on (a.ContactNumber = b.ContactNumber and b.DataKey between dateadd(m, -5, a.DataKey) and a.DataKey)
where a.ContactNumber = 'C10000'