2014-09-01 33 views
2

我有一個數據類似下面的表格過濾次數最多: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號碼。

我試過很多查詢,使用groupby,max,distinct無濟於事。我嘗試了自我連接,但無法獲得我所追求的結果。

例如,查詢SELECT *, MAX(revision) FROM artworks GROUP BY product給我的數據看起來很乍看,但該行包含的數據來自修訂版本號最低的數據,而不是最高的數據。

回答

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

這是偉大的,它的工作原理正是我想要的至。謝謝!因此,它獲取了所有信息,然後執行子查詢以排除具有相同產品名稱和較低版本號的任何內容。這就說得通了。 – 2014-09-01 15:55:02

+0

很好的答案..乾杯 – Wanderer 2014-09-01 15:59:20

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;