update:
figured out after posting ... used row_number
created sub-partitions of taskassignments based on taskid order by
taskassigmentid`. guys.
suppose build system keep track of simple task assignments following schema:
tasks: taskid currentlyassignedto taskaddedtime taskendtime 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 foo 2013-05-03 23:28:32.060 2 bar 2013-05-04 20:12:32.060 3 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
table tasks
contains current information of tasks. particular task (a or b) assigned multiple workers (one @ time). every time assignment happens (including creation time), entry added taskassignments
table specifying whom task assigned , @ time. when task reassigned, currentlyassignedto
field in tasks
updated current worker. when task completed, taskendtime
field updated in tasks
table. taskassignmentid
incremental index.
with that, want build query/view output this:
vwtaskbreakdown: taskid assignedto starttime endtime foo 2013-05-03 23:28:32.060 2013-05-04 20:12:32.060 bar 2013-05-04 20:12:32.060 2013-05-05 10:12:32.060 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
where, particular task, endtime
of assignment starttime
of next assignment. if there no next assignment, endtime
comes taskendtime
of table tasks
.
any hint how can done nicely?
disclaimer
: don't have prior experience sql
thanks, noobie
you can try this...
select taskid,assignedto,starttime,coalesce( (select min(starttime) tablename a.taskid=t.taskid , a.starttime>t.starttime), (select taskendtime t1 b b.taskid=t.taskid , b.currentlyassignedto=t.assignedto) )as endtime tablename t
Comments
Post a Comment