두 날짜 범위 사이의 레코드를 가져오려면안녕,
처음 4개 열이 입력이고 마지막 2개 열이 필요한 출력인 다음 데이터 테이블이 있습니다. ID = ID, Adm.Date = Ref.Date를 일치시켜 1-3열과 4열을 결합하기 위해 두 테이블을 조인하려고 했습니다. 이제 두 개의 출력 열( 관리 Date_1 및 Dis_Date_1) 아래 그림과 같이.범위 사이의 모든 Ref.Date에 대해 채워진 Adm.Date 및 Dis.Date가 필요합니다. Adm.Date 및 Dis.Date와 날짜 범위에 맞지 않는 항목에 대한 누락된 값입니다. 각각의 Adm을 얻을 수 있었습니다. 날짜 및 Dis.Date는 해당 범위의 모든 레코드가 아닌 다음 다음 레코드에 대해서만 if 및 lag 함수를 사용합니다. 이 문제에 대한 적절한 해결책을 찾을 수 있는 방법이 있으면 알려 주시기 바랍니다.
미리 감사드립니다.
| ID | 관리 날짜 | Dis.Date | 참조 날짜 | 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 | 관리 날짜 | Dis.Date | 참조 날짜 | 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년 13월 12일 | | |
| 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] = .
);
);