【发布时间】:2021-07-12 16:41:53
【问题描述】:
表 A 有 ID、次要 ID、客户名称、记录日期。
表 A ID 有时可能对同一客户有不同的辅助 ID。
表 B 有 ID,可以使用此 ID 加入表 A。
表 B 有 ID 和描述。
用户通过在表 A 中找到的辅助 ID 搜索客户。
我需要创建一些表 C 或结果,它们返回表 A 中的所有数据,除了加入其 ID 后来自表 B 的数据,但我还需要考虑不同的辅助 ID 的标准并且只包括跨 ID 和辅助 ID 的最新记录。
例如,辅助 ID 123、234 和 987 是同一个人 (Jane)。假设她结婚了,但对于她的某些记录,可能不会更新(因此 ID:1 和次要 ID:234 有名字 Jane Doe 和 Jane Brown)。
表 A:
|ID|Secondary ID|Customer First Name|Customer Last Name|Record |
|--|------------|-------------------|------------------|--------|
|1 |123 |Jane |Doe |02/03/20|
|1 |123 |Jane |Doe |01/02/20|
|1 |234 |Jane |Brown |04/01/21|
|1 |234 |Jane |Doe |05/01/21|
|1 |987 |Jane |Doe |03/04/21|
|2 |567 |Jack |Brown |01/28/21|
|2 |567 |Jack |Brown |06/01/21|
表 B:
|ID|Description |
|--|----------------|
|1 |A description |
|2 |Some description|
如果用户搜索 Jane Doe 的辅助 ID 为 123,则她的实际最新记录在辅助 ID 234 下,最后记录日期为 05/01/21。 每当用户搜索 ID 123 时,我都需要返回该记录,该 ID 应该从该用户的搜索中显示,而不是 234。
结果:
|ID|Secondary ID|Customer First Name|Customer Last Name|Record|Description|
|--|------------|-------------------|------------------|--------|----------------|
|1 |123 |Jane |Doe |05/01/21|A description |
另外,如果有人搜索一个只有一个 ID 的辅助 ID,它只需要返回最新的记录。
例如。用户搜索 567。结果应该是:
|ID|Secondary ID|Customer First Name|Customer Last Name|Record|Description|
|--|------------|-------------------|------------------|--------|----------------|
|2 |567 |Jack |Brown |06/01/21|Some description|
我怎样才能做到这一点?
【问题讨论】:
-
如果 123 有两个不同的名字会发生什么?像 234
-
只要是同一个人,就应该是同一个场景。 ID 是这里的主键。只需要客户在次要 ID 的某些搜索中的最新记录日期,即使搜索到的次要 ID 不是具有最新记录的 ID,也可以考虑该次要 ID 是否也与某个主要 ID 匹配(即。 ID:1 具有 123、234、978 作为可能的辅助 ID)。
-
这似乎是一个数据库规范化问题。该名称应该在客户表中,而不是在表 A 的每一行中。当他们更改名称时,您在一个地方进行更新,它会反映在客户 ID 的所有使用中。
-
这毫无意义,因为 bith 可以有不同的日期,并且算法可以选择正确的日期,所以你会得到两个甚至更多的结果
-
不幸的是,无法控制可能会为数据库规范化带来此问题的数据库,只是尝试将其视为一种可能性并报告任何差异。