0

最初のテーブルにタスク データ (タスク名、create dateassign_to など) を格納し、2 番目のテーブルにタスク履歴データoperation_date(タスクの完了、タスクの拒否など) を格納する 2 つのテーブルがあります (Task および Task_history テーブル)。

会社がタスクを作成して従業員に割り当て、従業員がタスクを受け入れて完了します。

タスクcreate_date列は実行するタスクの順序を指定し、両方operation_datecompleted status列はタスク補完の順序を指定します。

従業員の詳細を報告するためのクエリが必要です。従業員は最初に指定された順序でタスクを完了しますか? 与えられたシーケンスに従って完了したタスクはいくつありますか?

特定の日の従業員の task_creation および operation_date のテーブルを注文するステータス完了タスクのクエリを試みました。次に、select クエリの rownum を追加してから、2 つのテーブルを結合します。行数が等しい場合、従業員は指定されたシーケンスのタスクを完了します。しかし、クエリの結果は私が期待したものとは異なりました。そのように表示される行番号、 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

おそらく、ROWNUM の代わりにROW_NUMBER関数を使用する必要があります。

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 に答える