我有两个这样的表:
T1_Key, T1_Data, T1_ValidUntil
1 A 2000-01-01
1 B 2000-06-30
2 C 2005-05-31
3 D 2004-12-31
3 E 2007-04-30
3 F 2008-01-31
T2_Key, T2_Data, T2_ValidUntil
1 R 2002-03-31
2 S 2001-06-30
2 T 2003-02-28
2 U 2005-05-31
3 V 2006-09-30
3 W 2007-06-30
这定义了特定数据有效的多个间隔。例如对于键 2 和日期 2002-01-01,条目 (2, C, 2005-05-31) 和 (2, T, 2003-02-28) 是有效的(即具有下一个较大日期的条目)。对于键 2 和日期 2010-01-01,没有有效的条目。
对于像上面这样的单个查询,我只是分别查询两个表并将数据连接到我的应用程序中。但是,对于维护应用程序,我想加入这两个表。结果应该包含所有有效的间隔/组合,就像这样(键 3 是最复杂的,因为没有共享日期):
T1_Key, T1_Data, T1_ValidUntil, T2_Key, T2_Data, T2_ValidUntil
1 A 2000-01-01 1 R 2002-03-31
1 B 2000-06-30 1 R 2002-03-31
2 C 2005-05-31 2 S 2001-06-30
2 C 2005-05-31 2 T 2003-02-28
2 C 2005-05-31 2 U 2005-05-31
3 D 2004-12-31 3 V 2006-09-30 <- I1
3 E 2007-04-30 3 V 2006-09-30 <- I2
3 E 2007-04-30 3 W 2007-06-30 <- I3
3 F 2008-01-31 3 W 2007-06-30 <- I4
ASCII-Art vor Case 3(时间线):
2004-12-31 2007-04-30 2008-01-31
T1 -----|-----------------|-----------------------|----------
I1 I2 I3 I4 Nothing valid here
T2 ---------------|-----------------|--------------------------
2006-09-30 2007-06-30
目前我只是使用键加入,但这给出了很多无效的组合。因此,我需要一种方法来说“将其与另一个表中具有下一个更高(或相等)日期的条目加入”,以及一种在两个方向上都这样做的方法......
该方案是预定义的,我无法对其进行太多更改。第三个多对多表对我来说似乎是多余的数据。
提前致谢!
1 个回答