根据第二个表中列y的最大值,在列x上连接2个表

时间:2017-08-01 12:43:04

标签: sql ms-access join max

我在这里看过一些帖子。使用这篇文章(Select value A from the same record as max( value B) and then join with another table on value C)我已经开始查询但它不起作用。嵌入式SELECT查询甚至是否允许在Access?

中使用

套环

_______________________
|hole_id|max_depth|...|
|  1    |  340    |   |
|  2    |  400    |   |
|  3    |  250    |   |

测定

______________________
|hole_id|depth_to|...|
|  1    |  58    |   |
|  1    |  62    |   |
|  1    |  69    |   |
|  2    |  102   |   |
|  2    |  110   |   |
|  3    |  20    |   |
|  3    |  25    |   |

我需要返回

________________________________
|hole_id|max_depth|depth_to|...|
|  1    |  340    |  69    |   |
|  2    |  400    |  110   |   |
|  3    |  250    |  25    |   | 

-

SELECT DISTINCT A.hole_id, A.max_depth, B.depth_from, B.depth_to
FROM collar A
LEFT JOIN assay B
ON A.hole_id = B.hole_id
WHERE A.hole_id = (
     SELECT max(C.depth_to)
     FROM assay C
     WHERE C.hole_id = A.hole_id
     )
WHERE A.max_depth > B.depth_to AND A.section="BLK" AND A.holetype="Exploration"
;

3 个答案:

答案 0 :(得分:1)

只需加入两个表,返回最大depth_to并将其余表分组。在这种情况下无需嵌套查询。

SELECT      assay.hole_id
            , max_depth
            , MAX(depth_to) AS max_depth_to
FROM        assay LEFT JOIN collar ON assay.hole_id = collar.hole_id
GROUP BY    assay.hole_id, max_depth
ORDER BY    assay.hole_id

如果每个字段名称对于一个表都是唯一的,也不需要完全限定每个字段名称。

答案 1 :(得分:0)

SELECT collar.hole_id, collar.max_depth, (select max(depth_to) from assay where assay.hole_id=collar.hole_id) AS depth_to
FROM collar;

答案 2 :(得分:0)

是的,嵌套SELECT查询可以在Access中完成。这可以为您提供您正在寻找的内容:

SELECT
    A.hole_id, 
    A.max_depth, 
    B.depth_from, 
    B.depth_to
FROM 
    collar A
LEFT JOIN 
    (select B.*
    from assay B
        inner join (
            select hole_id, max(depth_to) as max_depth
            from assay
            group by hole_id
            ) BD on BD.hole_id=B.hole_id and BD.max_depth=B.depth_to
     ) as BM on BM.hole_id=A.hole_id
WHERE 
    A.section="BLK" AND A.holetype="Exploration"
;