获取两个日期范围之间的记录你好,
我有以下数据表,前 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] = .
);
);