查找每条记录的交叉表的最新条目?
Find the newest entry of a crosstable per record?
我有三个 table:
- 我的产品及其 ID 和功能。
- 是 table 对我的产品进行的处理,带有处理 ID、方法和日期。这些处理是分批进行的,所以有交叉table
- 包含产品 ID 和治疗 ID 以及治疗成功的布尔值。
每个产品都可以经过许多不同的处理,因此存在多对多关系。我现在想为每个产品添加到产品 table (1.) 一个值,该值显示其最近成功治疗的方法(如果有的话)。
我进行了查询,按产品 ID 对交叉 table 的条目进行了分组,但我不知道如何显示最后一次治疗的方法和日期。
table 1:
| productID | size | weight | height | ... |
|-----------|:----:|-------:|--------|-----|
| 1 | 13 | 16 | 9 | ... |
| 2 | 12 | 17 | 12 | ... |
| 3 | 11 | 15 | 15 | ... |
| ... | ... | ... | ... | ... |
table 2:
| treatmentID | method | date |
|-------------|:--------:|-----------:|
| 1 | dye blue | 01.02.2016 |
| 2 | dye red | 01.02.2017 |
| 3 | dye blue | 01.02.2018 |
| ... | ... | ... |
table 3:
| productID | treatmentID | success |
|-----------|:-----------:|--------:|
| 1 | 1 | yes |
| 1 | 2 | yes |
| 1 | 3 | no |
| ... | ... | ... |
我需要 table 1 就像:
table 1:
| productID | size | weight | height | latest succesful method |
|-----------|:----:|-------:|--------|-------------------------|
| 1 | 13 | 16 | 9 | dye red |
| 2 | 12 | 17 | 12 | ... |
| 3 | 11 | 15 | 15 | ... |
| ... | ... | ... | ... | ... |
我的查询:
SELECT table3.productID, table2.method
FROM table2 INNER JOIN table3 ON table2.treatmentID = table3.treatmentID
GROUP BY table3.productID, table2.method
HAVING (((table3.productID)=Max([table2].[date])))
ORDER BY table3.productID DESC;
但这不只显示一个(最新的)条目,而是显示所有条目。
这里最简单的解决方案是在 sql 中编写一个子查询,或者创建一个新查询作为子查询(它看起来像 table)以帮助指示(或elminate) 你想看的记录。
使用类似但可能略有不同的源数据,因为您只给出了一个示例。
Table1
| ProductID | Size | Weight | Height |
|-----------|------|--------|--------|
| 1 | 13 | 16 | 9 |
| 2 | 12 | 17 | 12 |
| 3 | 11 | 15 | 15 |
Table2
| TreatmentID | Method | Date |
|-------------|------------|----------|
| 1 | dye blue | 1/2/2016 |
| 2 | dye red | 1/2/2017 |
| 3 | dye blue | 1/2/2018 |
| 4 | dye yellow | 1/4/2017 |
| 5 | dye brown | 1/5/2018 |
Table3
| ProductID | TreatmentID | Success |
|-----------|-------------|---------|
| 1 | 1 | yes |
| 1 | 2 | yes |
| 1 | 3 | no |
| 2 | 4 | no |
| 2 | 5 | yes |
首要任务是获取成功治疗的最大(日期)和产品 ID。
我们将通过汇总日期以及产品 ID 和 "success" 来完成此操作。
SELECT Table3.productid, Max(Table2.Date) AS MaxOfdate, Table3.success
FROM Table2 INNER JOIN Table3 ON Table2.treatmentid = Table3.treatmentid
GROUP BY Table3.productid, Table3.success;
这应该给我们一些类似的东西:
| ProductID | MaxofDate | Success |
|-----------|-----------|---------|
| 1 | 1/2/2018 | No |
| 1 | 1/2/2017 | Yes |
| 2 | 1/4/2017 | No |
| 2 | 1/8/2017 | Yes |
我们会将此查询另存为 "regular" 查询。我将我的名称命名为 "max",您可能应该使用更具描述性的名称。您将在下一个查询中看到 "max"。
接下来我们将把 tables1-3 连接在一起,但此外我们还将使用这个 "max" 子查询到 link tables 1 和 2 productID 和 MaxOfDate 到 TreatmentDate where success = "yes" 以查找最近成功治疗的详细信息。
SELECT table1.productid, table1.size, table1.weight, table1.height, Table2.method
FROM ((table1 INNER JOIN [max] ON table1.productid = max.productid)
INNER JOIN Table2 ON max.MaxOfdate = Table2.date) INNER JOIN Table3 ON
(Table2.treatmentid = Table3.treatmentid) AND (table1.productid = Table3.productid)
WHERE (((max.success)="yes"));
设计将如下所示:
Design
(ps。在将 table 添加到查询设计时,您可以通过单击 "Queries" 选项卡将查询添加到设计查询编辑器。它们的作用就像tables,请小心,因为非常详细的查询往往会使访问陷入困境)
运行 这个查询应该给我们最终的结果。
| ProductID | Size | Weight | Height | Method |
|-----------|------|--------|--------|-----------|
| 1 | 13 | 16 | 9 | dye red |
| 2 | 12 | 17 | 12 | dye brown |
我有三个 table:
- 我的产品及其 ID 和功能。
- 是 table 对我的产品进行的处理,带有处理 ID、方法和日期。这些处理是分批进行的,所以有交叉table
- 包含产品 ID 和治疗 ID 以及治疗成功的布尔值。
每个产品都可以经过许多不同的处理,因此存在多对多关系。我现在想为每个产品添加到产品 table (1.) 一个值,该值显示其最近成功治疗的方法(如果有的话)。
我进行了查询,按产品 ID 对交叉 table 的条目进行了分组,但我不知道如何显示最后一次治疗的方法和日期。
table 1:
| productID | size | weight | height | ... |
|-----------|:----:|-------:|--------|-----|
| 1 | 13 | 16 | 9 | ... |
| 2 | 12 | 17 | 12 | ... |
| 3 | 11 | 15 | 15 | ... |
| ... | ... | ... | ... | ... |
table 2:
| treatmentID | method | date |
|-------------|:--------:|-----------:|
| 1 | dye blue | 01.02.2016 |
| 2 | dye red | 01.02.2017 |
| 3 | dye blue | 01.02.2018 |
| ... | ... | ... |
table 3:
| productID | treatmentID | success |
|-----------|:-----------:|--------:|
| 1 | 1 | yes |
| 1 | 2 | yes |
| 1 | 3 | no |
| ... | ... | ... |
我需要 table 1 就像:
table 1:
| productID | size | weight | height | latest succesful method |
|-----------|:----:|-------:|--------|-------------------------|
| 1 | 13 | 16 | 9 | dye red |
| 2 | 12 | 17 | 12 | ... |
| 3 | 11 | 15 | 15 | ... |
| ... | ... | ... | ... | ... |
我的查询:
SELECT table3.productID, table2.method
FROM table2 INNER JOIN table3 ON table2.treatmentID = table3.treatmentID
GROUP BY table3.productID, table2.method
HAVING (((table3.productID)=Max([table2].[date])))
ORDER BY table3.productID DESC;
但这不只显示一个(最新的)条目,而是显示所有条目。
这里最简单的解决方案是在 sql 中编写一个子查询,或者创建一个新查询作为子查询(它看起来像 table)以帮助指示(或elminate) 你想看的记录。
使用类似但可能略有不同的源数据,因为您只给出了一个示例。
Table1
| ProductID | Size | Weight | Height |
|-----------|------|--------|--------|
| 1 | 13 | 16 | 9 |
| 2 | 12 | 17 | 12 |
| 3 | 11 | 15 | 15 |
Table2
| TreatmentID | Method | Date |
|-------------|------------|----------|
| 1 | dye blue | 1/2/2016 |
| 2 | dye red | 1/2/2017 |
| 3 | dye blue | 1/2/2018 |
| 4 | dye yellow | 1/4/2017 |
| 5 | dye brown | 1/5/2018 |
Table3
| ProductID | TreatmentID | Success |
|-----------|-------------|---------|
| 1 | 1 | yes |
| 1 | 2 | yes |
| 1 | 3 | no |
| 2 | 4 | no |
| 2 | 5 | yes |
首要任务是获取成功治疗的最大(日期)和产品 ID。
我们将通过汇总日期以及产品 ID 和 "success" 来完成此操作。
SELECT Table3.productid, Max(Table2.Date) AS MaxOfdate, Table3.success
FROM Table2 INNER JOIN Table3 ON Table2.treatmentid = Table3.treatmentid
GROUP BY Table3.productid, Table3.success;
这应该给我们一些类似的东西:
| ProductID | MaxofDate | Success |
|-----------|-----------|---------|
| 1 | 1/2/2018 | No |
| 1 | 1/2/2017 | Yes |
| 2 | 1/4/2017 | No |
| 2 | 1/8/2017 | Yes |
我们会将此查询另存为 "regular" 查询。我将我的名称命名为 "max",您可能应该使用更具描述性的名称。您将在下一个查询中看到 "max"。
接下来我们将把 tables1-3 连接在一起,但此外我们还将使用这个 "max" 子查询到 link tables 1 和 2 productID 和 MaxOfDate 到 TreatmentDate where success = "yes" 以查找最近成功治疗的详细信息。
SELECT table1.productid, table1.size, table1.weight, table1.height, Table2.method
FROM ((table1 INNER JOIN [max] ON table1.productid = max.productid)
INNER JOIN Table2 ON max.MaxOfdate = Table2.date) INNER JOIN Table3 ON
(Table2.treatmentid = Table3.treatmentid) AND (table1.productid = Table3.productid)
WHERE (((max.success)="yes"));
设计将如下所示: Design
(ps。在将 table 添加到查询设计时,您可以通过单击 "Queries" 选项卡将查询添加到设计查询编辑器。它们的作用就像tables,请小心,因为非常详细的查询往往会使访问陷入困境)
运行 这个查询应该给我们最终的结果。
| ProductID | Size | Weight | Height | Method |
|-----------|------|--------|--------|-----------|
| 1 | 13 | 16 | 9 | dye red |
| 2 | 12 | 17 | 12 | dye brown |