2013-05-06 7 views
0

UPDATE: 게시 한 직후 알아 냈습니다 ... 본질적으로는 ROW_NUMBER을 TaskId ORDER BY TaskAssigmentId`를 기반으로 TaskAssignments의 하위 파티션을 만들 때 사용했습니다. 고마워.테이블의 다음/이전 행에 액세스하는 T-SQL

내가 다음 스키마와 간단한 작업 할당을 추적 할 수있는 시스템을 구축한다고 가정

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)을 여러 작업자 (한 번에 하나씩)에게 할당 할 수 있습니다. 과제가 생성 될 때마다 (생성 시간 포함) 테이블에 과제가 할당 된 시간과 시간을 지정하는 항목이 추가됩니다. 작업이 재 할당되면 TasksCurrentlyAssignedTo 필드가 현재 작업자로 업데이트됩니다. 작업이 완전히 완료되면 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은 테이블 TasksTaskEndTime에서옵니다.

어떻게하면 좋을까요?

Disclaimer : 나는

감사합니다, Noobie

답변

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 

Sql Fiddle Demo

SQL과 사전 경험이없는