用于比较多个日期的关系数据库的结构
Structure of a relational database for comparing multiple dates
我们使用 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_SENT
与 DEP_X_RECEIVED
之间的时间跨度(例如客户 ID 1 的 "department A: 2 days, department B: 5 days...")
- 更重要的是,我想比较一个客户的所有
DEP_X_RECEIVED
日期:Determining the first (MIN
) and the last (MAX
) date a contract已收到,以查找每个客户在收到所有合同之前需要多少天。 (例如客户 ID 1 的 "the contracts were received within 6 days",因为第一个是在 5 月 3 日收到的,最后一个是在 5 月 9 日收到的)。此外,我想计算所有客户的平均时间跨度。如果尚未收到合同,则该字段中没有值。
在 MySQL 中,我可以使用 GREATEST
和 LEAST
等函数来比较不同列之间的值,但在 Access 中,我现在必须依赖 VBA我认为这被认为是不好的做法。我如何通过相当简单的 MAX
、MIN
和 AVG
操作来规范和重组我的 table 以实现我的目标?非常感谢!
只需将现有的 table 折叠成这个结构:
create table TABLE_1 (
CUSTOMER_ID int,
DEPARTMENT_ID int, -- foreign key reference to DEPARTMENT table
SENT date,
RECEIVED date
);
现在您可以简单地执行所需的分析,并将原始布局检索为透视报告或从部门 table 到新 TABLE_1 的 LEFT OUTER JOIN 到新的
我们使用 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_SENT
与DEP_X_RECEIVED
之间的时间跨度(例如客户 ID 1 的 "department A: 2 days, department B: 5 days...") - 更重要的是,我想比较一个客户的所有
DEP_X_RECEIVED
日期:Determining the first (MIN
) and the last (MAX
) date a contract已收到,以查找每个客户在收到所有合同之前需要多少天。 (例如客户 ID 1 的 "the contracts were received within 6 days",因为第一个是在 5 月 3 日收到的,最后一个是在 5 月 9 日收到的)。此外,我想计算所有客户的平均时间跨度。如果尚未收到合同,则该字段中没有值。
在 MySQL 中,我可以使用 GREATEST
和 LEAST
等函数来比较不同列之间的值,但在 Access 中,我现在必须依赖 VBA我认为这被认为是不好的做法。我如何通过相当简单的 MAX
、MIN
和 AVG
操作来规范和重组我的 table 以实现我的目标?非常感谢!
只需将现有的 table 折叠成这个结构:
create table TABLE_1 (
CUSTOMER_ID int,
DEPARTMENT_ID int, -- foreign key reference to DEPARTMENT table
SENT date,
RECEIVED date
);
现在您可以简单地执行所需的分析,并将原始布局检索为透视报告或从部门 table 到新 TABLE_1 的 LEFT OUTER JOIN 到新的