首页 文章

连接2个表,只显示id的最大值 - mysql

提问于
浏览
2

我有两个表,其中包含我在查询中加入的绘图信息 . 第一个表包含图纸的唯一编号, Headers 和绘制对象 . 第二个表包含修订版和图纸修订日期 .

表格1

|dwg_id|project_no|sws_dwg_no|dwg_title|dwg_by|
|1     |153       |153-100   |Pipe...  |JS    |

表2

|dwg_id|dwg_rev|dwg_date            |rev_id|
|1     |A      |2015-07-15 11:00:00 |1     |
|1     |B      |2015-07-23 12:00:00 |2     |
|1     |C      |2015-08-06 10:00:00 |3     |

我想加入两个表,只显示绘图的最新版本更改 .

这是我目前的查询 .

SELECT 
    `drawings`.`dwg_id`, 
    `project_no`, 
    `sws_dwg_no`, 
    `client_dwg_no`, 
    `dwg_title`, 
    `dwg_by`, 
    `dwg_rev`.`dwg_rev`, 
    `dwg_rev`.`dwg_date`, 
    MAX(`dwg_rev`.`dwg_rev`) AS dwg_rev 
FROM 
    (`drawings`) 
    JOIN `dwg_rev` ON `drawings`.`dwg_id` = `dwg_rev`.`dwg_id` 
WHERE 
    `project_no` = '153' 
GROUP BY 
    `sws_dwg_no`, 
    `dwg_rev`.`dwg_rev` 
ORDER BY 
    `dwg_rev`.`dwg_date` ASC, 
    `dwg_rev`.`dwg_rev` ASC

此查询返回的结果不包含最新的修订号,或者返回每个绘图的所有修订版 .

3 回答

  • 1

    您可以使用以下查询:

    SELECT d.*, dr.*
    FROM drawings AS d
    INNER JOIN (
       SELECT dwg_id, MAX(rev_id) AS maxRevId
       FROM dwg_rev
       GROUP BY dwg_id
    ) AS t ON d.dwg_id = t.dwg_id   
    INNER JOIN dwg_rev AS dr ON t.dwg_id = dr.dwg_id AND t.maxRevId = dr.rev_id
    WHERE project_no = 153
    

    上述查询的关键点是使用派生表返回最新版本,即 MAX(rev_id) ,每 dwg_id . 在该派生表上使用 INNER JOIN ,您可以从 dwg_rev 表中获取该行 .

    如果每个 project_no 有多个 dwg_id ,则必须使用上述内容 . 在这种情况下,上述查询将获取 project_no = 153 的每个绘图的最新修订 .

    Demo here

  • 0

    有时 MAX 不是最好的方法,而是使用 LIMIT 试试这个:

    SELECT 
        `drawings`.`dwg_id`, 
        `project_no`, 
        `sws_dwg_no`, 
        `client_dwg_no`, 
        `dwg_title`, 
        `dwg_by`, 
        `dwg_rev`.`dwg_rev`, 
        `dwg_rev`.`dwg_date`, 
        `dwg_rev`.`dwg_rev` AS dwg_rev 
    FROM 
        (`drawings`) 
        JOIN `dwg_rev` ON `drawings`.`dwg_id` = `dwg_rev`.`dwg_id` 
    WHERE 
        `project_no` = '153' 
    GROUP BY 
        `sws_dwg_no`, 
        `dwg_rev`.`dwg_rev` 
    ORDER BY 
        `dwg_rev`.`dwg_date` DESC, 
        `dwg_rev`.`dwg_rev` DESC
    LIMIT 1;
    
  • 0

    如果您需要最新版本,请在下面订购DESC检查代码 .

    如果填充此rev_id,您也可以仅通过dwg_rev . rev_id` DESC进行订购 .

    SELECT 附图 . dwg_id , project_no , sws_dwg_no , client_dwg_no , dwg_title , dwg_by , dwg_rev . dwg_rev , dwg_rev . dwg_date , MAX( dwg_rev . dwg_rev ) AS dwg_rev FROM ( 附图 ) JOIN dwg_rev ON 附图 . dwg_id = dwg_rev . dwg_id WHERE project_no = '153' GROUP BY sws_dwg_no , dwg_rev . dwg_rev ORDER BY dwg_rev . dwg_date DESC, dwg_rev . dwg_rev DESC LIMIT 1;

相关问题