두 날짜 범위 사이의 레코드를 가져오려면안녕,
처음 4개의 열이 입력이고 마지막 2개가 필요한 출력인 다음 데이터 테이블이 있습니다. ID = ID 및 Adm.Date = Ref.Date를 일치시켜 열 1-3과 열 4를 결합하기 위해 두 개의 테이블을 조인하려고 했습니다. 이제 두 개의 출력 열( Adm. Date_1 및 Dis_Date_1) 아래 그림과 같이.범위 사이의 모든 Ref.Date에 대해 채워진 Adm.Date 및 Dis.Date가 필요합니다. Adm.Date 및 Dis.Date 및 날짜 범위에 맞지 않는 누락 값. 나는 각각의 Adm을 얻을 수 있었다. 해당 범위의 모든 레코드가 아닌 다음 다음 레코드에 대해서만 if 및 lag 기능을 사용하는 날짜 및 Dis.Date. 이 문제에 대한 적절한 해결책을 찾을 수 있는 방법이 있으면 알려주십시오.
미리 감사드립니다.
| ID | Adm. 날짜 | Dis.날짜 | 참조 날짜 | Adm.Date_1 | Dis.Date_1 |
| 12 | 2014년 2월 12일 | 2014년 12월 15일 | 2014년 2월 12일 | 2014년 2월 12일 | 2014년 12월 15일 |
| 12 | | | 2014년 3월 12일 | 2014년 2월 12일 | 2014년 12월 15일 |
| 12 | | | 2014년 6월 12일 | 2014년 2월 12일 | 2014년 12월 15일 |
| 13 | | | 2015년 10월 1일 | | |
| 13 | 2016년 6월 1일 | 2016년 1월 25일 | 2016년 6월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
| 13 | | | 2016년 10월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
| 13 | | | 2016년 11월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
| 13 | | | 2016년 12월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
Re: 두 날짜 범위 사이의 레코드를 가져오려면해결책을 주셔서 감사합니다. 완벽하게 작동했습니다.Re: 두 날짜 범위 사이의 레코드를 가져오려면ID에 대한 몇 가지 논리적 확인을 통해 이를 매우 쉽게 수용할 수 있습니다.
dt = Current Data Table();
ad_date_temp = .;
dis_date_temp = .;
id_temp = :ID[1];
for(i=1,i<=N Row(dt), i++,
//Only update these vars if current row has new values for them
If(!Is Missing(:Name("Adm. Date")[i]),
//Execute if new Adm. Date
ad_date_temp = :Name("Adm. Date")[i];
dis_date_temp = :Name("Dis. Date")[i];
id_temp = :ID[i],
);
If(:Name("Ref.Date")[i] >= ad_date_temp & :Name("Ref.Date")[i] <= dis_date_temp & :ID[i] == id_temp,
//Execute if Ref Date is in the current range
:Name("Adm.Date_1")[i] = ad_date_temp;
:Name("Dis.Date_1")[i] = dis_date_temp
,
//Execute if Ref Date is not in the current range
:Name("Adm.Date_1")[i] = .;
:Name("Dis.Date_1")[i] = .
);
);Re: 두 날짜 범위 사이의 레코드를 가져오려면안녕 윌든,
해결해 주셔서 감사합니다.
Ref.Date가 해당 특정 ID의 해당 날짜 범위에 있기를 원합니다. 행 4(ID 13)의 경우 Ref.Date는 ID 12의 Adm.Date와 Dis.Date 사이에 있으므로 "."이어야 합니다. ID 12의 값을 취하는 대신. 이상적으로 날짜는 사용 가능한 이전 Adm.Date 및 Dis.Date 레코드가 아닌 ID를 기반으로 채워야 합니다. 이 스크립트가 이 요구 사항을 처리할지 확실하지 않습니다. 도움을 주셔서 감사합니다. 감사해요.
리니
| ID | Adm. 날짜 | Dis.날짜 | 참조 날짜 | Adm.Date_1 | Dis.Date_1 |
| 12 | 2014년 2월 12일 | 2014년 12월 15일 | 2014년 2월 12일 | 2014년 2월 12일 | 2014년 12월 15일 |
| 12 | | | 2014년 3월 12일 | 2014년 2월 12일 | 2014년 12월 15일 |
| 12 | | | 2014년 6월 12일 | 2014년 2월 12일 | 2014년 12월 15일 |
| 13 | | | 2014년 12월 13일 | | |
| 13 | | | 2015년 10월 1일 | | |
| 13 | 2016년 6월 1일 | 2016년 1월 25일 | 2016년 6월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
| 13 | | | 2016년 10월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
| 13 | | | 2016년 11월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
| 13 | | | 2016년 12월 1일 | 2016년 6월 1일 | 2016년 1월 25일 |
Re: 두 날짜 범위 사이의 레코드를 가져오려면다음은 테이블의 행을 반복하여 테스트 케이스에서 작동한 솔루션입니다.코드를 이해하는 데 도움이 필요하면 알려주십시오.
dt = Current Data Table();
ad_date_temp = .;
dis_date_temp = .;
for(i=1,i<=N Row(dt), i++,
//Only update these vars if current row has new values for them
ad_date_temp = If(IsMissing(:Name("Adm. Date")[i]),ad_date_temp, :Name("Adm. Date")[i]);
dis_date_temp = If(IsMissing(:Name("Dis. Date")[i]),dis_date_temp, :Name("Dis. Date")[i]);
Show(i, ad_date_temp, dis_date_temp);
If(:Name("Ref.Date")[i] >= ad_date_temp & :Name("Ref.Date")[i] <= dis_date_temp,
//Execute if Ref Date is in the current range
:Name("Adm.Date_1")[i] = ad_date_temp;
:Name("Dis.Date_1")[i] = dis_date_temp
,
//Execute if Ref Date is not in the current range
:Name("Adm.Date_1")[i] = .;
:Name("Dis.Date_1")[i] = .
);
);