2017-11-06 11 views
0

일련의 거래 및 재고 확인 작업을하고 있습니다. 제 목표는 거래 전 최대 5 일 전에 회사가 해당 품목에 대한 상품 발송을 받았는지 확인하기위한 깃발을 만드는 것입니다. 다음과 같이 의사의 논리는 다음과 같습니다다른 테이블을 참조하여 기간 내의 레코드를 확인하십시오.

For each transaction date: 
    For all inventory receipts whether inventory.item# = transaction.item# 
     Are there records between transaction date - 5 and transaction date? 

일반적으로, 난 그냥 두 테이블을 생성하고 그들과 합류,하지만 그들은 정말 두 개의 별도의 데이터 structures.My 초기 시도 있습니다

PROC SQL; 
    Create Table TABLE 1 AS 
     SELECT TRANSACTION.DATE, 
       SUM(CASE WHEN INVENTORY.DATE BETWEEN (TRANSACTION.DATE - 5 AND TRANSACTION.DATE) AND INVENTORY.ITEM = TRANSACTION.ITEM; 

하지만 어떻게 것 테이블 참조? 왼쪽/오른쪽/내부 조인이 여기에 적합한 지 잘 모르겠습니다. 나는 테이블에 합류하려고하지 않는다.

편집 : 다음과 같이 구성되어 내 데이터는 다음과 같습니다

TRANSACTION TABLE 

ITEM DATE 
0012 12/2 
0231 12/3 
0421 12/3 

INVENTORY TABLE 

0012 11/30 
0231 12/4 
0421 12/1 

ITEM 0012, 우리는 재고 테이블에 보일 것이다 그 때문에, 해당 항목에 대한 11/30에 접수가 있다고 볼 항목 0231에 대해서는 거래일로부터 5 일 이내에 인벤토리 레시피가 없다는 것을 알 수 있습니다. 따라서 플래그 = 0입니다.

+0

포스트 샘플 입력 데이터와 출력 데이터 예상 :

가정 테이블 이름은 T1 및 T2이다. 출력으로 원하는 것이 무엇인지 명확하지 않으며 SAS에서 하위 쿼리없이 아주 쉽게 자체 조인을 수행 할 수 있습니다. – Reeza

+0

고려해야 할 사항 - 데이터가 어떻게 구성되는지, 특히 날짜 필드와 하루에 여러 레코드가있는 경우. – Reeza

+0

@Reeza 데이터 구조가 추가되었습니다. –

답변

1

표준 SQL 쿼리가 여기에 적합합니다. 왜 표준을 느꼈는지 확실하지 않습니다. 조인이 작동하지 않습니다. 배치 한 구조, 샘플 데이터와 함께 작동합니다. 날짜와 항목에 대해 중복 된 항목이있는 경우 어떻게 작동하는지 잘 모르겠지만 질문에 해당 항목을 포함시키지 않았으므로 샘플 데이터가 실제 상황을 반영한다고 가정해야합니다.

proc sql; 
create table want as 
select t1.*, t2.date as date2, 
    case when not missing(t2.date) then 1 
      else 0 
    end as check_flag 
from t1 as t1 
left join t2 as t2 
    on t1.item=t2.item 
    and t2.date between t1.date-5 and t1.date; 
quit;