0

我有一个表格,可以记录某些任务是否正在进行中,如果工作已经开始并且工作是否已经完成,则会记录一个条目。我遇到的问题是费用只与“开始”条目一起记录,但我只需要在任务完成时计算费用,即有一个已完成的条目。每个任务只能执行一次,即您不会看到 2 个任务 1 启动,而两者之间没有“完成”登录。

例如

我想计算已完成任务 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 
4

2 回答 2

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')

如果你想要更多的数据,比如花在任务上的时间,这个查询不会做

于 2013-10-13T19:46:26.690 回答
0

如果可以重复使用相同的 id,并且您使用的是 SQL 2012,您可能想看看 lag() 窗口函数是否可以在这里提供帮助。

于 2013-10-13T20:25:04.903 回答