2016-11-16 81 views
0

我想加入這些表(task_id with post_id),它將返回您在下面看到的所有內容。這很好,但我想接下來要做的是在保留具有最高版本的項目的同時刪除task_id的重複項。獲得列x的MAX,同時在列y上獲得DISTINCT

我有一個2個表,以便:

項目

ID title task_id project_id  version 
1 "Test"  123   456   1 
2 "Test 2"  124   456   1 
3 "Test 3"  125   456   1 
4 "X 3.1"  125   456   1.1 
5 "X 3.2"  125   456   1.2 

任務

ID post_id meta_key meta_value 
1  123 _completed  0 
4  124 _completed  0 
5  125 _completed  0 

,我有這樣的SQL語句至今:

SELECT * 
FROM items t0 
INNER JOIN tasks AS t1 
ON t0.task_id = t1.post_id 
WHERE t1.meta_key = '_completed' 
AND project_id = 456 

返回:

ID title task_id project_id version ID post_id meta_key meta_value 
1 "Test"  123   456   1  1  123 _completed  0 
2 "Test 2"  124   456   1  1  124 _completed  0 
3 "Test 3"  125   456   1  1  125 _completed  0 
4 "X 3.1"  125   456   1.1  1  125 _completed  0 
5 "X 3.2"  125   456   1.2  1  125 _completed  0 

如何刪除重複的TASK_ID的,但保持的最高版本,因此該表將是:

ID title task_id project_id version ID post_id meta_key meta_value 
1 "Test"  123   456   1  1  123 _completed  0 
2 "Test 2"  124   456   1  1  124 _completed  0 
5 "X 3.2"  125   456   1.2  1  125 _completed  0 

基本上我最近下令他們BY版本和使用GROUP BY TASK_ID但顯然SQL做不讓你這樣做。

任何人都可以想出一個很好的方法來實現這一目標嗎?

+0

這個問題是問及SO無休止地回答。少數這些答案是正確的。此外,本手冊還深入討論了該主題。也就是說,如果你還在掙扎,請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-tobe -a-very-simple-sql-query – Strawberry

+0

嘗試在SELECT語句中使用'MAX(version)',並在'GROUP BY'子句中使用'task_id'。 – Viki888

回答

0

根據相關文章,我認爲這應該工作。

SELECT * 
FROM items t0 
INNER JOIN tasks AS t1 ON t0.task_id = t1.post_id 
INNER JOIN 
    (SELECT task_id, MAX(version) AS MaxVersion 
    FROM items 
    GROUP BY task_id) groupedt0 
ON t0.task_id = groupedt0.task_id 
AND t0.version = groupedt0.MaxVersion 
AND project_id = 456 
AND t1.meta_key = '_completed' 
ORDER BY ID ASC 

參見:How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?

+0

完美的作品。謝謝!對不起,沒有想到搜索會很容易找到它。此外,我現在在SQL上很平均。 – SamohtVII