我有两个表,其中包含我在查询中加入的绘图信息 . 第一个表包含图纸的唯一编号, 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 回答
您可以使用以下查询:
上述查询的关键点是使用派生表返回最新版本,即
MAX(rev_id)
,每dwg_id
. 在该派生表上使用INNER JOIN
,您可以从dwg_rev
表中获取该行 .如果每个
project_no
有多个dwg_id
,则必须使用上述内容 . 在这种情况下,上述查询将获取project_no = 153
的每个绘图的最新修订 .Demo here
有时
MAX
不是最好的方法,而是使用LIMIT
试试这个:如果您需要最新版本,请在下面订购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_revON
附图.
dwg_id=
dwg_rev.
dwg_idWHERE
project_no= '153' GROUP BY
sws_dwg_no,
dwg_rev.
dwg_revORDER BY
dwg_rev.
dwg_dateDESC,
dwg_rev.
dwg_revDESC LIMIT 1;