2017-10-20 75 views
0

我正在使用SQL Server,我需要從待辦事項列表中查詢下一個方法。SQL:如何按任務分組並僅選擇那些已完成的任務?

ID Date  Status Phase 
1 21.1.2017 Done 1 
1 22.1 2017 Done 2 
2 20.1.2017 Done 1 
2 22.1.2017 Undone 2 
3 23.1.2017 Undone 1 
3 25.1.2017 Undone 2 

所以我需要找到那些完成(所有狀態完成),然後取最後日期,以便MAX(日期)任務?我不需要階段信息。

結果應該是

ID Date  Status 
1 22.1 2017 Done 

能否請您幫助我如何通過組,採取MAX(日期),而且還使一些規則,所有狀態都完成了嗎?

+0

是階段狀態的ID? –

回答

1

這裏是一個方法:

select t.id, max(t.date) as date, max(t.status) as status 
from t 
group by t.id 
having min(t.status) = max(t.status) and min(t.status) = 'Done'; 
+0

用最小/最大的技巧很好的觸摸 – Magisch

+0

謝謝!這工作! =) – Markus

+0

但是這個查詢不返回任何日期。如果將第三行的日期更改爲23,它仍然返回ID = 1 – arslanaybars

4

您可以使用此。

SELECT TOP 1 [ID], [Date], [Status] FROM MyTable 
    WHERE [Status] ='Done' 
    ORDER BY [Date] DESC