在工作中,我一直在设计MS Access查询来操纵客户端服务协议。 我坚持的要求是,如果一个客户有多个连续的协议(即一个的开始日期是前一个的结束日期之后的一天),它们将被计为一个(所以使用最早的开始日期。
表中的相关字段为:
例如:
103, A1234, Homecare, 20th Oct 2013, 05th Nov 2013
110, A1234, OT Equip, 06th Nov 2013, 09th Dec 2013
114, A1234, Homecare, 10th Dec 2013, 19th Jan 2014
125, A1234, Homecare, 20th Jan 2014, 15th Jun 2014
147, A1234, Homecare, 16th Jun 2014, null
最后三个将被视为单一协议(跨越2013年12月10日至今的日期范围),但前两个不会(103不是连续114,110是不同类型) 。最新协议将用作基础,因为后续查询将仅保留结束日期晚于[Prompt]
且已开放至少365天的合并协议。不幸的是,抓住min(Start_Date)
不会做。
因此,该提取的所需结果将是:
103, A1234, Homecare, 20th Oct 2013, 05th Nov 2013
110, A1234, OT Equip, 06th Nov 2013, 09th Dec 2013
147, A1234, Homecare, 10th Dec 2013, null
我认为可能需要几个派生表/子查询,列出每个客户的协议,然后迭代地在结果表中向后工作以找到最早的合格开始日期。对所涉及的递归量的唯一安慰是,基于查询的表I是通过过滤原始协议表的MakeTable查询创建的,因此只有结束日期大于[Prompt] - 365 days
的协议或包括null,并且这个正在运行的协议表不到10,000条记录。