獲取兩個日期範圍之間的記錄你好,
我有以下數據表,前 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。 Date 和 Dis.Date 使用 if 和 lag 函數僅用於下一個後續記錄,而不是該範圍內的所有記錄。 如果有任何方法可以找到解決此問題的合適方法,請告訴我。
提前致謝。
| ID | 管理員 日期 | 日期 | 參考日期 | Adm.Date_1 | Dis.Date_1 |
| 12 | 2/12/2014 | 15/12/2014 | 2/12/2014 | 2/12/2014 | 15/12/2014 |
| 12 | | | 2014 年 3 月 12 日 | 2/12/2014 | 15/12/2014 |
| 12 | | | 2014 年 6 月 12 日 | 2/12/2014 | 15/12/2014 |
| 13 | | | 10/1/2015 | | |
| 13 | 6/1/2016 | 25/1/2016 | 6/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 10/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 11/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 12/1/2016 | 6/1/2016 | 25/1/2016 |
回复:獲取兩個日期範圍之間的記錄謝謝你的解決方案。 它工作得很好。回复:獲取兩個日期範圍之間的記錄您可以通過對 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] = .
);
);回复:獲取兩個日期範圍之間的記錄嗨,威爾登,
感謝您的解決方案。
我希望 Ref.Date 位於該特定 ID 的相應日期範圍內。 讓我們說第 4 行(ID 13),Ref.Date 在 ID 12 的 Adm.Date 和 Dis.Date 之間,所以它應該是“。”而不是採用 ID 12 的值。 理想情況下,日期應根據 ID 填充,而不是根據以前可用的 Adm.Date 和 Dis.Date 記錄填充。 我不確定這個腳本是否會滿足這個要求。 感謝您的幫助。 謝謝。
里尼
| ID | 管理員 日期 | 日期 | 參考日期 | Adm.Date_1 | Dis.Date_1 |
| 12 | 2/12/2014 | 15/12/2014 | 2/12/2014 | 2/12/2014 | 15/12/2014 |
| 12 | | | 2014 年 3 月 12 日 | 2/12/2014 | 15/12/2014 |
| 12 | | | 2014 年 6 月 12 日 | 2/12/2014 | 15/12/2014 |
| 13 | | | 13/12/2014 | | |
| 13 | | | 10/1/2015 | | |
| 13 | 6/1/2016 | 25/1/2016 | 6/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 10/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 11/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 12/1/2016 | 6/1/2016 | 25/1/2016 |
回复:獲取兩個日期範圍之間的記錄這是一個通過循環遍歷表中的行來處理您的測試用例的解決方案。如果您需要幫助理解代碼,請告訴我。
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] = .
);
);