MySQL查询 - 获取由另一列过滤的最高编号的行

时间:2014-09-01 15:45:25

标签: mysql

我有一个表格,其数据类似于:

id  job_id  filename    status  revision    product
----------------------------------------------------------
1   1       1r0.jpg     P       0           Product 1
2   1       2r0.jpg     P       0           Product 2
3   1       3r0.jpg     P       0           Product 3
4   1       2r1.jpg     P       1           Product 2

我想运行一个返回以下内容的SQL查询:

id  job_id  filename    status  revision    product
----------------------------------------------------------
1   1       1r0.jpg     P       0           Product 1
3   1       3r0.jpg     P       0           Product 3
4   1       2r1.jpg     P       1           Product 2

即。如果有两个名称相同product的行,我想获得revision个最高的一行。

我使用groupbymaxdistinct尝试了大量查询但无济于事。我尝试过自我加入,但无法得到我之后的结果。

例如,查询SELECT *, MAX(revision) FROM artworks GROUP BY product为我提供了第一眼看上去很好的数据,但该行包含的数据来自版本号最低的数据,而不是最高数据。

2 个答案:

答案 0 :(得分:2)

您可以在没有GROUP BY的情况下执行此操作,如下所示:

SELECT *
FROM artworks a
WHERE NOT EXISTS (
    SELECT *
    FROM artworks aa
    WHERE a.product=aa.product AND a.revision < aa.revision
)

答案 1 :(得分:0)

如果没有子查询,您可能会得到相同的结果:

SELECT a.*
FROM artworks a
left join artworks b
on a.produc = b.produc
and a.revision < b.revision
where b.id is null;