2016-08-10 4 views
1

에 따라 조인 나는 두 개의 테이블이 있습니다 표를 비교하여 내 결과 쿼리하지만 brand_id 변경에 brand_id에서 풀을 따라하고 싶은SQL이 날짜

+---------+-----------+----------+ 
| prop_id | agrx_date | brand_id | 
+---------+-----------+----------+ 
| AL408 | 5/5/1986 | CI  | 
| AL408 | 6/30/1994 | CI  | 
| AL408 | 5/3/1999 | CI  | 
| AL408 | 4/21/2006 | CI  | 
| AL408 | 3/20/2009 | QI  | 
+---------+-----------+----------+ 

+-------+----------+ 
| prop | str_date | 
+-------+----------+ 
| AL408 | 3/1/2009 | 
| AL408 | 4/1/2009 | 
| AL408 | 5/1/2009 | 
| AL408 | 6/1/2009 | 
+-------+----------+ 

표 B str_date를 agrx_date로 변경하십시오. brand_id가 agrx_date를 통해 변경된 후 한 달 동안 결과에 새 brand_id가 반영됩니다. 모든 str_dates는 월별 값입니다.

최종 결과는 다음과 같습니다

+-------+----------+--------+ 
| prop | str_date | Result | 
+-------+----------+--------+ 
| AL408 | 3/1/2009 | CI  | 
| AL408 | 4/1/2009 | QI  | 
| AL408 | 5/1/2009 | QI  | 
| AL408 | 6/1/2009 | QI  | 
+-------+----------+--------+ 

가 여기에 지금까지 가지고 무엇을 (정확하지 않은) 나는 내 최종 결과를 얻을하는 방법을 모르겠어요.

select 
a.prop 
,a.str_date 
,b.agrx_date 
,b.brand_id 

from tableA a 
left join tableB b 
on a.prop = b.prop_id 
and a.str_date < b.agrx_date 

where a.prop = 'AL408' 

저는 CTE 나 다른 임시 테이블을 사용할 수 없도록 이것을 Tableau를 통해 전달합니다.

+1

게시 된 결과를 생성하는 데 사용 된 자세한 로직을 제공해주십시오. –

+0

알려 주시기 바랍니다 여기에 날짜를 비교하는 방법 – robinbansalsolutions

+0

질문을 편집했습니다. – Bernardo

답변

1

lead() 분석 기능을 사용하여 기간을 만들 수 있습니다. 날짜 범위는 올바른 브랜드를 끌어 들이기 위해 쎄타 참여의 일부로 사용될 수 있습니다. 이것은 다음 레코드에서 날짜 값을 가져 오는 아주 간단한 방법입니다. 아래 next_agrx_date 정의를 참조하십시오.

범위는 시작 (>=)에 포함되지만 끝 부분에 포함되지는 않습니다 (<). 끝이 맞지 않는 범위의 경우에도 null 사례를 처리해야합니다. 이 논리는 아래의 조인에서 찾을 수 있습니다.

select 
    a.prop 
    ,a.str_date 
    ,b.agrx_date 
    ,b.brand_id 
from tableA a 
left join 
(select 
    prop 
    ,agrx_date 
    ,brand_id 
    ,lead(agrx_date) over (partition by prop order by agrx_date) next_agrx_date 
    from tableB) b 
on (b.prop = a.prop and a.str_date >= b.agrx_date and (a.str_date < b.next_agrx_date or b.next_agrx_date is null)) 
order by prop, str_date 
+0

환상적입니다. 고맙습니다! – Bernardo

0

DATE_FORMAT을 사용하여 날짜를 형식과 일치하도록 변경할 수 있습니다.

DATE_FORMAT(str_date,'%m-%d-%Y') 

또는 사용하려는 어떤 필드와 형식입니다.