2013-10-13 2 views
0

У меня есть таблица, которая регистрирует, выполняется ли какая-либо работа для определенных задач, запись регистрируется, если работа начата, и если работа завершена. Проблема заключается в том, что расходы регистрируются только с помощью записей «начального», но мне нужно только подсчитать расход, если задача завершена, т.е. имеет завершенную запись. Каждая задача может быть предпринята только один раз, т. Е. Вы не увидите 2 задания 1 без «завершенного» входа в систему.Подсчитайте столбец «количество» в Sql Server 2008

Например

Я хочу, чтобы подсчитать затраты по завершенным task1-х

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

Если тот же идентификатор может быть повторно использован, и вы находитесь на SQL 2012, вы можете посмотреть, может ли здесь работать функция window().

Смежные вопросы