UPDATE:
我在发布此消息后很快就明白了这一点......基本上我使用ROW_NUMBER
根据TaskId ORDER BY
TaskAssigmentId`创建了TaskAssignments的子分区。谢谢你们。
假设我使用以下模式构建一个系统来跟踪简单的任务分配:
Tasks:
TaskId CurrentlyAssignedTo TaskAddedTime TaskEndTime
A FooBar 2013-05-03 23:28:32.060 2013-05-07 10:12:32.060
B Bob 2013-05-03 20:12:32.060 NULL
TaskAssignments:
TaskAssignmentId TaskId AssignedTo StartTime
1 A Foo 2013-05-03 23:28:32.060
2 A Bar 2013-05-04 20:12:32.060
3 A FooBar 2013-05-05 10:12:32.060
4 B Alice 2013-05-03 20:12:32.060
5 B Bob 2013-05-06 10:12:32.060
表Tasks
包含任务的当前信息。可以将特定任务(A或B)分配给多个工作人员(一次一个)。每次分配发生时(包括创建时间),都会在TaskAssignments
表中添加一个条目,指定分配任务的人员以及分配给谁。重新分配任务后,CurrentlyAssignedTo
中的Tasks
字段将更新为当前工作人员。任务完全完成后,TaskEndTime
字段将在Tasks
表中更新。 TaskAssignmentId
是增量索引。
有了这个,我想构建一个查询/视图来输出这样的东西:
VwTaskBreakDown:
TaskId AssignedTo StartTime EndTime
A Foo 2013-05-03 23:28:32.060 2013-05-04 20:12:32.060
A Bar 2013-05-04 20:12:32.060 2013-05-05 10:12:32.060
A FooBar 2013-05-05 10:12:32.060 2013-05-07 10:12:32.060
B Alice 2013-05-03 20:12:32.060 2013-05-06 10:12:32.060
B Bob 2013-05-06 10:12:32.060 NULL
对于特定任务,分配的EndTime
是下一个分配的StartTime
。如果没有下一个分配,EndTime
来自表TaskEndTime
的{{1}}。
有关如何做到这一点的任何提示吗?
Tasks
:我之前没有使用过SQL的经验
谢谢, Noobie
答案 0 :(得分:0)
你可以尝试这样......
Select TaskId,AssignedTo,StartTime,cOALESCE(
(sELECT MIN(StartTime) FROM tABLENAME
A WHERE A.TaskId=t.TaskId AND a.StartTime>t.StartTime),
(sELECT TaskEndTime FROM T1 B WHERE B.TaskId=T.TaskId AND B.CurrentlyAssignedTo=T.AssignedTo)
)AS eNDtIME
FROM tABLEnAME
T