匹配日期下面的子表中的数据,该日期位于主表中

时间:2016-10-21 11:02:33

标签: sql ms-access

我有两个表中的数据

表:Sub_Data

+----------------+-----------------------+
|  SKU_No        | SKU_Registration_Date |
+----------------+-----------------------+
| abc123         | 1/21/2016             |
| abc124         | 2/21/2016             |
| xyz124         | 3/1/2016              |
+----------------+-----------------------+

表:SKU_Rate

+--------+----------+------+
| SKU_NO | Eff_Date | Rate |
+--------+----------+------+
| abc123 | 1/1/2016 |   25 |
| abc123 | 2/1/2016 |   27 |
| abc123 | 3/1/2016 |   29 |
| abc124 | 1/1/2016 |   35 |
| abc124 | 2/1/2016 |   37 |
| abc124 | 3/1/2016 |   39 |
| xyz124 | 1/1/2016 |   45 |
| xyz124 | 2/1/2016 |   47 |
| xyz124 | 3/1/2016 |   49 |
+--------+----------+------+

我想有一个Query,应该从SKU_Rate返回Sub_Data有效率

示例输出应该是这样的

SKU_No  SKU_Registration_Date   Rate

abc123  1/21/2016                25 as this rate is effective till 2/1/2016 -1 day

abc124  2/21/2016                39 as this rate is effective till 3/1/2016 - 1 day

xyz124  3/1/2016                 49 as this rate is effective from 3/1/2016

1 个答案:

答案 0 :(得分:0)

您必须加入SKU_Rate两次(使用两个不同的别名)。第一次加入将是

ON Sub_Data.SKU_No=SKU_Rate.SKU_NO AND SKU_Rate.Eff_Date<=Sub_Data.SKU_Registration_Date

然后您将获得MAX(Eff_Date)Rate

其他联接将是

ON Sub_Data.SKU_No=SKU_Rate.SKU_NO AND SKU_Rate.Eff_Date>Sub_Data.SKU_Registration_Date

然后您将获得MIN(Eff_Date)

这将为您提供两个日期来生成您想要的结果,使用IIF和两个日期(并检查潜在的空日期)。