2017-10-20 40 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