SQL:如何按任务分组并仅选择已完成的任务?
我正在使用SQL Server,下一步需要从todo列表进行查询SQL:如何按任务分组并仅选择已完成的任务?,sql,sql-server,Sql,Sql Server,我正在使用SQL Server,下一步需要从todo列表进行查询 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 所以我需要找到那些已经完成的任务(所有状态都已完成),然后取最后一个日期,
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
您能帮助我如何分组,取最大值(日期),但同时制定一些规则,确保所有状态都已完成吗?这里有一种方法:
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';
这里有一种方法:
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';
你可以用这个
SELECT TOP 1 [ID], [Date], [Status] FROM MyTable
WHERE [Status] ='Done'
ORDER BY [Date] DESC
你可以用这个
SELECT TOP 1 [ID], [Date], [Status] FROM MyTable
WHERE [Status] ='Done'
ORDER BY [Date] DESC
阶段是状态的ID吗?阶段是状态的ID吗?但此查询不返回任何日期。如果将第三行日期更改为23,它仍然返回ID=1@arslanaybars . . . 第三行有一个
id=2
。这独立于id=1
,因此更改该行中的日期对其他id没有影响。我添加了额外的列(OP似乎知道如何获取这些值)。@GordonLinoff但根据问题,例如,如果第三行数据为'23.1.2017',则“id”应为2,因为其“状态”也为“完成”,并且具有最大日期。如果我理解正确,问题是,根据max Date和Status=“Done”查找正确的id。但此查询不返回任何日期。如果将第三行日期更改为23,它仍然返回ID=1@arslanaybars . . . 第三行有一个id=2
。这独立于id=1
,因此更改该行中的日期对其他id没有影响。我添加了额外的列(OP似乎知道如何获取这些值)。@GordonLinoff但根据问题,例如,如果第三行数据为'23.1.2017',则“id”应为2,因为其“状态”也为“完成”,并且具有最大日期。如果我理解正确,问题是,根据max Date和Status=“Done”找到正确的id。