Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 是否为每条记录查找交叉表的最新条目?_Database_Ms Access_Ms Access 2016 - Fatal编程技术网

Database 是否为每条记录查找交叉表的最新条目?

Database 是否为每条记录查找交叉表的最新条目?,database,ms-access,ms-access-2016,Database,Ms Access,Ms Access 2016,我有三张桌子: 我的产品及其ID和功能 是一个表,其中包含我的产品的治疗方法以及治疗ID、方法和日期。治疗是在许多产品的批次中进行的,因此有一个交叉表 产品ID和治疗ID以及治疗成功的布尔值 每种产品都可以经过许多不同的处理,因此存在多对多关系。现在,我想在产品表(1)中为每种产品添加一个值,该值显示最近成功治疗的方法(如果有) 我做了一个按产品ID对交叉表条目进行分组的查询,但我不知道如何显示它最后一次处理的方法和日期 table 1: | productID | size | weight

我有三张桌子:

  • 我的产品及其ID和功能
  • 是一个表,其中包含我的产品的治疗方法以及治疗ID、方法和日期。治疗是在许多产品的批次中进行的,因此有一个交叉表
  • 产品ID和治疗ID以及治疗成功的布尔值 每种产品都可以经过许多不同的处理,因此存在多对多关系。现在,我想在产品表(1)中为每种产品添加一个值,该值显示最近成功治疗的方法(如果有)

    我做了一个按产品ID对交叉表条目进行分组的查询,但我不知道如何显示它最后一次处理的方法和日期

    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      |
    | ...       | ...         | ...     |
    
    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"));
    
    我需要表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中编写一个子查询,或者创建一个新查询作为子查询(看起来像一个表)来帮助指示(或删除)您想要查看的记录

    使用类似但可能略有不同的源数据,因为您只给出了一个示例

    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     |
    
    首要任务是获得成功治疗的最大(日期)和ProductID

    我们将通过将日期与productID和“success”一起聚合来实现这一点

    这应该给我们一些大致的启示:

    | ProductID | MaxofDate | Success |
    |-----------|-----------|---------|
    | 1         | 1/2/2018  | No      |
    | 1         | 1/2/2017  | Yes     |
    | 2         | 1/4/2017  | No      |
    | 2         | 1/8/2017  | Yes     |
    
    我们将此查询保存为“常规”查询。我把我的名字命名为“max”,你可能应该用更具描述性的词。您将在下一个查询中看到“max”

    接下来,我们将表1-3连接在一起,但除此之外,我们还将使用这个“max”子查询将表1和表2按productID和MaxOfDate链接到TreatmentDate,其中success=“yes”查找最近成功治疗的详细信息

    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      |
    | ...       | ...         | ...     |
    
    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"));
    
    设计将如下所示:

    (另外,在向查询设计中添加表时,您可以通过单击“查询”选项卡向设计查询编辑器中添加查询。它们的行为就像表一样,只是要小心,因为非常详细的查询往往会阻碍访问)

    运行此查询将给出最终结果

    | ProductID | Size | Weight | Height | Method    |
    |-----------|------|--------|--------|-----------|
    | 1         | 13   | 16     | 9      | dye red   |
    | 2         | 12   | 17     | 12     | dye brown |
    

    请您也添加一些示例数据(包括表名和字段标题)和预期输出。用于格式化表格。我们还可以看到您已经构建的查询的SQL语句吗?是的,尝试概括所有内容。谢谢你的编辑。我今天病了,但会尽快试试这个。谢谢,这看起来很棒!谢谢,你做得很好。谢谢你这么多的努力!