如何查询表以获取记录的序列或链?

时间:2016-11-15 14:43:14

标签: sql db2

我有一张如下表格

TaskDel3gation

用户可以将任务分配给其他用户。其他用户可以将他/她的任务分配给其他用户,依此类推。

用户分配任务将由TASK_ASSIGN_USERID识别,接收任务的用户将由TASK_RCV_USERID识别。

用户可以在EFFECTIVE_DATE和EXPIRATION_DATE指定的特定时间段内将任务分配给他人。

如果其他用户已在指定的持续时间内完成任务,则用户无法将任务分配给其他用户。

当前日期之后的任务/记录被视为非活动/已完成的任务。

我想查询表以获取给定TASK_ASSIGN_USERID的当前活动任务。查询应该返回所请求的TASK_ASSIGN_USERID的记录,如果TASK_RCV_USERID将任务分配给其他人,则记录另一个记录。反过来,如果TASK_RCV_USERID分配给另一个用户,它应该返回另一个记录,依此类推。

样品

  

TASK_ASSIGN_USERID TASK_RCV_USERID

     

A B

     

B C

     

C D

     

D E

     

...

     

...

我正在使用db2数据库。谁能帮帮我吗?目前我在我的代码中使用for循环来检索所有记录。

如果使用SQL无法完成,那么我想使用pl / SQL。

有人可以帮助我吗?

更新:

  

TASK_ASSIGN_USERID | TASK_RCV_USER_ID | EFFECTIVE_DATE | EXPIRATION_DATE

     

A | B | 10-11-2016 | 17-11-2016

     

B | C | 11-11-2016 | 16-11-2016

     

A | B | 12-11-2016 | 20-11-2016

     

B | C | 15-11-2016 | 18-11-2016

     

C | D | 15-11-2016 | 18-11-2016

当TASK_ASSIGN_USERID = A

时,应该在下面给我
  

TASK_ASSIGN_USERID | TASK_RCV_USER_ID | EFFECTIVE_DATE | EXPIRATION_DATE

     

A | B | 12-11-2016 | 20-11-2016

     

B | C | 15-11-2016 | 18-11-2016

     

C | D | 15-11-2016 | 18-11-2016

当TASK_ASSIGN_USERID = B

时,应该在下面给我
  

TASK_ASSIGN_USERID | TASK_RCV_USER_ID | EFFECTIVE_DATE | EXPIRATION_DATE

     

B | C | 15-11-2016 | 18-11-2016

     

C | D | 15-11-2016 | 18-11-2016

当TASK_ASSIGN_USERID = C

时,应该在下面给我
  

TASK_ASSIGN_USERID | TASK_RCV_USER_ID | EFFECTIVE_DATE | EXPIRATION_DATE

     

C | D | 15-11-2016 | 18-11-2016

1 个答案:

答案 0 :(得分:0)

这样的东西?

select TASK_ASSIGN_USERID,TASK_RCV_USER_ID, max( EFFECTIVE_DATE) as  EFFECTIVE_DATE, max (EXPIRATION_DATE) as EXPIRATION_DATE
from youtable
group by TASK_ASSIGN_USERID,TASK_RCV_USER_ID