0

我有两个表,第一个存储任务数据(任务名称,create dateassign_to 等),第二个表存储任务历史数据,例如operation_date,任务完成,任务被拒绝等(Task 和 Task_history 表)

公司创建任务并将其分配给员工,然后员工接受任务并完成它们。

任务create_date列指定任务的执行顺序,operation_datecompleted status列指定任务互补的顺序。

我需要一个查询以报告员工详细信息,即员工是否按照开头指定的顺序完成任务?按照给定的顺序完成了多少任务?

我尝试查询状态已完成任务,为给定日期的员工订购 task_creation 和 operation_date 表。然后,为选择查询添加 rownum,然后连接两个表。如果 rownums 相等,则员工完成给定序列的任务,否则不完成。但是查询结果和我预想的不一样。像这样显示的Rownums, r_h--> 1,2,3 ; r_t--> 1,15,17

    SELECT *
  FROM  (SELECT W.id, w.create_date, ROWNUM as r_t
            FROM wfm_task_1 W where W.task_status = 3
        ORDER BY W.create_date ASC) TASK_SEQ LEFT OUTER JOIN
  (  SELECT H.wfm_task, H.record_date, ROWNUM as r_h
            FROM wfm_task_history H
           WHERE H.task_status = 3
                 AND H.record_date BETWEEN (TO_DATE ('12.07.2013',
                                                     'DD.MM.YYYY')
                                            - 1)
                                       AND (TO_DATE ('12.07.2013',
                                                     'DD.MM.YYYY')
                                            + 1)
        ORDER BY H.record_date ASC) HISTORY_SEQ 

ON TASK_SEQ.id = HISTORY_SEQ.wfm_task

样本数据集

wfm_task (ID, CREATION_DATE, TASK_NAME)

49361 | 06.07.2013 11:50:00 | missionx
49404 | 10.07.2013 13:01:00 | missiony
49407 | 11.07.2013 11:02:00 | missiona
49108 | 01.07.2013 21:02:00 | missionb

task_history (ID,WFM_TASK,OP_DATE, STATUS)

98 | 49361 | 12.07.2013 15:19:19 | 3 
92 | 49404 | 12.07.2013 11:10:50 | 3
90 | 49407 | 12.07.2013 11:06:58 | 3
78 | 49108 | 03.07.2013 11:02:00 | 1

result (WFM_TASK,RECORD_DATE,R_H,ID,CREATE_DATE,R_T)

49361 | 12.07.2013 15:19:19 | 3 | 49361 | 06.07.2013 11:50:00 | 15
49404 | 12.07.2013 11:10:50 | 2 | 49404 | 10.07.2013 13:01:00 | 17
49407 | 12.07.2013 11:06:58 | 1 | 49407 | 11.07.2013 11:02:00 | 1

状态 3 = 完成。我想找到那些是订单完成的任务。我检查任务完成顺序很可能是任务创建顺序。

4

1 回答 1

1

您可能必须使用ROW_NUMBER函数而不是 ROWNUM。

SELECT a.id, a.create_date,
       row_number() over (order by a.create_date) r_t,
       b.record_date,
       row_number() over (order by b.record_date) r_h
from wfm_task a left outer join task_history b
                on a.id = b.wfm_task
 where b.status = 3
   and b.record_date between date'2013-07-12' - 1 and date'2013-07-12' + 1

演示在这里

于 2013-09-17T12:06:42.963 回答