我有一个表格,其数据类似于:
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
个最高的一行。
我使用groupby
,max
,distinct
尝试了大量查询但无济于事。我尝试过自我加入,但无法得到我之后的结果。
例如,查询SELECT *, MAX(revision) FROM artworks GROUP BY product
为我提供了第一眼看上去很好的数据,但该行包含的数据来自版本号最低的数据,而不是最高数据。
答案 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;