2017-10-20 4 views
0

私はSQL Serverを使用しており、次の方法でtodoリストからクエリを作成する必要があります。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(日付)を取るだけでなく、すべてのステータスが完了しているいくつかのルールを作るか私を助けてくださいすることができすべきですか?あなたがこれを使用することができます

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

フェーズはステータスのIDですか? –

答えて

1

は、ここに一つの方法です。

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

最小/最大のトリックで素敵なタッチ – Magisch

+0

ありがとう!これはうまくいった! =) – Markus

+0

しかし、このクエリは日付を返しません。 3行目が23に変更されても、ID = 1 – arslanaybars

4

関連する問題