取得兩個日期範圍之間的記錄你好,
我有以下資料表,前 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。 使用 if 和 lag 函數的 Date 和 Dis.Date 僅適用於下一個後續記錄,而不適用於該範圍內的所有記錄。 請告訴我是否有任何方法可以找到解決此問題的適當方法。
提前致謝。
| ID | 海軍上將。 日期 | 日期 | 參考日期 | 管理員日期_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日 |
回覆:取得兩個日期範圍之間的記錄謝謝你的解決方案。 它工作得很好。回覆:取得兩個日期範圍之間的記錄您可以透過對 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 | 海軍上將。 日期 | 日期 | 參考日期 | 管理員日期_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日 |
回覆:取得兩個日期範圍之間的記錄這是一個透過循環遍歷表中的行來處理您的測試案例的解決方案。如果您需要幫助理解程式碼,請告訴我。
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] = .
);
);