用于比较多个日期的关系数据库的结构

时间:2016-05-15 13:07:21

标签: sql ms-access database-design relational-database database-schema

我们正在使用Microsoft Access数据库来跟踪正在进行的客户列表。每个客户都必须与多个部门签订合同 - 总共13个(!)部门 - 我们希望在发送和接收合同时跟踪每个客户的当前进度。这个结构看起来像这样:

    Table 1
    -------------------------------------------------------------------------------------------------------------------
    CUSTOMER_ID | ... | DEP_A_SENT | DEP_A_RECEIVED | DEP_B_SENT | DEP_B_RECEIVED | DEP_C_SENT | DEP_C_RECEIVED | ... |
    -------------------------------------------------------------------------------------------------------------------
         1      | ... | 2015-05-01 |   2015-05-03   | 2015-05-04 |   2015-05-09   | 2015-05-01 |   2015-05-05   | ... |
         2      | ... | 2015-05-01 |   2015-05-05   | 2015-05-01 |   2015-05-03   | 2015-05-13 |       ---      | ... |
         ...  
  • 我希望能够为客户和部门计算DEP_X_SENTDEP_X_RECEIVED之间的时间跨度(例如"部门A:2天,部门B:5天......& #34;对于客户ID 1)
  • 更重要的是,我想为一位客户比较所有DEP_X_RECEIVED日期:确定合同的第一个(MIN)和最后一个(MAX)日期在收到所有合同之前收到了每个客户需要多少天。 (例如"合同是在6天内收到的"对于客户ID 1,因为第一个是在5月3日收到的,而最后一个是在5月9日收到的)。此外,我想计算所有客户的平均时间跨度。如果尚未收到合同,则该字段中没有值。

在MySQL中,我可以使用GREATESTLEAST等函数来比较不同列之间的值,但在Access中我现在必须依赖VBA,我认为这被认为是不好的做法。我如何通过相当简单的MAXMINAVG操作来规范化和重组我的表格以实现我的目标?非常感谢!

1 个答案:

答案 0 :(得分:2)

只需将现有表格折叠为此结构:

{{1}}

现在,您可以简单地执行所需的分析,并将原始布局检索为从DEPARTMENT表到新TABLE_1的Pivot报告或LEFT OUTER JOIN。