【发布时间】:2011-12-19 21:31:40
【问题描述】:
TableA (id int, match1 char,match2 char,match3 char,startdate datetime,enddate,status char)
id match1 match2 match3 startdate enddate
1 AAA BBB CCC 2006-01-01 2007-01-01
2 AAA BBB CCC 2006-12-12 2008-01-01
3 AAA BBB CCC 2008-01-01 2012-02-02
4 DDD EEE FFF 2009-01-01 2012-01-01
5 DDD EEE FFF 2013-01-01 2020-01-01
Ref TableB (match1 char, match2, match3, startdate datetime, enddate)
match1 match2 match3 startdate enddate
AAA BBB CCC 2006-01-01 2015-01-01
DDD EEE FFF 2009-01-01 2015-01-01
好的,所以 [Stat] 为 NULL,我必须在 tableA 中使用 'FAIL' 填充 stat:
1) 匹配tableB中的match1,match2,match3,日期(开始和结束)在范围之外。让我们看看 ID=5 有效日期 = 2013 - 2020,但在它的参考表中,它的 2009-2015 所以 ID = 5 得到“失败”。
2) 在集合中,集合是 match1、match2、match3 相等的记录,因此 ID 123 是一个集合,ID 4&5 是另一个集合。因此,在一组中,生效日期(开始和结束)日期重叠。即使集合 1 (ID1,2,3) 存在于引用表中其对应记录的日期范围内,但 ID = 2 的生效日期与 ID = 1 的生效日期重叠,因此 ID = 2 得到'FAIL'
预期结果:
id match1 match2 match3 startdate enddate stat
1 AAA BBB CCC 2006-01-01 2007-01-01 NULL
2 AAA BBB CCC 2006-12-12 2008-01-01 FAIL
3 AAA BBB CCC 2008-01-01 2012-02-02 NULL
4 DDD EEE FFF 2009-01-01 2012-01-01 NULL
5 DDD EEE FFF 2013-01-01 2020-01-01 FAIL
提前致谢。
【问题讨论】:
-
将第一个视为 ok 并“失败”下一个重叠。
-
在 ID 1 和 2 重叠的第二种情况下,您如何决定“失败” ID 为 2 的行而不是 ID 为 1 的行?在这种情况下,您是否总是使开始日期较晚的行失败?