Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何按任务分组并仅选择已完成的任务?_Sql_Sql Server - Fatal编程技术网

SQL:如何按任务分组并仅选择已完成的任务?

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 所以我需要找到那些已经完成的任务(所有状态都已完成),然后取最后一个日期,

我正在使用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
所以我需要找到那些已经完成的任务(所有状态都已完成),然后取最后一个日期,那么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。