2013-10-13 134 views
0

我有一個表,用於註冊某些任務是否正在進行工作,如果工作已經開始並且工作已完成,則會記錄一個條目。我遇到的問題是,費用僅記錄在「開始」條目中,但如果任務完成,即只有完整條目,則只需計算費用。每個任務只能進行一次,也就是說,如果兩個task1之間沒有「已完成」登錄,就不會看到兩個任務。在Sql Server 2008中計數'數量'列

我想算爲代價完成任務1的

Task (NvarChar)Time(datetime2) Status(nvarchar) Expense(Int) 
task1 101/01/01 12:00 started 20 
task2 01/01/01 11:30 finished null 
task2 01/01/01 11:00 started 10 
task1 01/01/01 10:30 finished null 
task2 01/01/01 10:20 finished null 
task1 01/01/01 10:15 started null 
task2 01/01/01 10:00 started 30 

回答

0

如果你的表中有一個TASK_ID有可能用類似的東西:

select task, expense from 
tasks where status = 'started' and exists 
(select null from tasks t where task_id = task_id and status = 'finished') 

如果您想了解更多數據,就像在任務上花費的時間一樣,這個查詢不會這樣做

+0

問題是,相同的task_id需要「重新啓動」,因此您需要開發邏輯以獲得相應的邏輯,例如:之前的最後一個... – igr

+0

我試圖編輯它 – igr

+0

@igr任務無法重新啓動首先重新啓動。 – Fearghal

0

如果相同的ID可以重用,並且你在SQL 2012上,你可能想看看lag()窗口函數是否可以在這裏幫助。