2017-08-22 8 views
1

私に岩を投げないようにしてください。同じ問題(特にthis question)に関する質問が2つありますが、私の問題は少し違う。のは、私は次のような結果を返すサブクエリを持っているとしましょう:私はちょうどインクリメントうSTART_TIME列を除いてnull値で埋め日が欠落していたときに月の日がないときにヌル値の行を挿入するSQL

+--------+--------------------------+-----------+----------+ 
| JOB_ID | START_TIME    | STATUS | JOB_NAME | 
+--------+--------------------------+-----------+----------+ 
| 1234 | 17-08-01 16:15:29,251000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
| 1235 | 17-08-03 16:25:20,931000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
| 1236 | 17-08-07 16:15:27,452000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
| 1237 | 17-08-09 07:50:27,661000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
| 1238 | 17-08-10 16:19:19,554000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 

私はそれがやりたいことは、新しい行を追加することです一日で私が望む結果のExemple:

+--------+--------------------------+-----------+----------+ 
| JOB_ID | START_TIME    | STATUS | JOB_NAME | 
+--------+--------------------------+-----------+----------+ 
| 1234 | 17-08-01 16:15:29,251000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
|  | 17-08-02 00:00:00,000000 |   |   | 
+--------+--------------------------+-----------+----------+ 
| 1235 | 17-08-03 16:25:20,931000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
|  | 17-08-04 00:00:00,000000 |   |   | 
+--------+--------------------------+-----------+----------+ 
|  | 17-08-05 00:00:00,000000 |   |   | 
+--------+--------------------------+-----------+----------+ 
|  | 17-08-06 00:00:00,000000 |   |   | 
+--------+--------------------------+-----------+----------+ 
| 1236 | 17-08-07 16:15:27,452000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
|  | 17-08-08 00:00:00,000000 |   |   | 
+--------+--------------------------+-----------+----------+ 
| 1237 | 17-08-09 07:50:27,661000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 
| 1238 | 17-08-10 16:19:19,554000 | COMPLETED | EXTRACT | 
+--------+--------------------------+-----------+----------+ 

私は右ここで私はたくさんのために尋ねるかもしれない知っているが、あなたは私を助けることができると思うなら、それは非常にいただければ幸いです!

+1

job_idがNULLかどうかは、プライマリキーですか? –

答えて

1

DSETはデータを設定するだけです。 CSETでは、欠落した行を生成します。

WITH 
    dset 
    AS 
     (SELECT 1234 job_id 
       , TO_DATE ('17-08-01 16:15:29', 'YY-MM-DD HH24:mi:SS') start_time 
       , 'COMPLETED' status 
       , 'EXTRACT' job_name 
      FROM DUAL 
     UNION ALL 
     SELECT 1235 job_id 
       , TO_DATE ('17-08-03 16:25:20', 'YY-MM-DD HH24:mi:SS') start_time 
       , 'COMPLETED' status 
       , 'EXTRACT' 
      FROM DUAL 
     UNION ALL 
     SELECT 1236 job_id 
       , TO_DATE ('17-08-07 16:15:27', 'YY-MM-DD HH24:mi:SS') start_time 
       , 'COMPLETED' status 
       , 'EXTRACT' job_name 
      FROM DUAL 
     UNION ALL 
     SELECT 1237 job_id 
       , TO_DATE ('17-08-09 07:50:27', 'YY-MM-DD HH24:mi:SS') start_time 
       , 'COMPLETED' status 
       , 'EXTRACT' 
      FROM DUAL 
     UNION ALL 
     SELECT 1238 job_id 
       , TO_DATE ('17-08-10 16:19:19', 'YY-MM-DD HH24:mi:SS') start_time 
       , 'COMPLETED' status 
       , 'EXTRACT' 
      FROM DUAL), 
    aset (job_id, start_time, status 
     , job_name, next_start_time) 
    AS 
     (SELECT job_id 
       , start_time 
       , status 
       , job_name 
       , LEAD (start_time) 
        OVER (
         PARTITION BY job_name ORDER BY start_time 
        ) 
        next_start_time 
      FROM dset 
     UNION ALL 
     SELECT NULL 
       , TRUNC (start_time + 1) 
       , status 
       , NULL 
       , next_start_time 
      FROM aset 
      WHERE TRUNC (start_time + 1) < TRUNC(next_start_time)) 
SELECT job_id 
    , start_time 
    , status 
    , job_name 
    FROM Aset ORDER BY START_TIME; 

JOB_ID START_TIME    STATUS JOB_NAME 
1234 2017/08/01 4:15:29 PM COMPLETED EXTRACT 
     2017/08/02    COMPLETED   
1235 2017/08/03 4:25:20 PM COMPLETED EXTRACT 
     2017/08/04    COMPLETED   
     2017/08/05    COMPLETED   
     2017/08/06    COMPLETED   
1236 2017/08/07 4:15:27 PM COMPLETED EXTRACT 
     2017/08/08    COMPLETED   
1237 2017/08/09 7:50:27 AM COMPLETED EXTRACT 
1238 2017/08/10 4:19:19 PM COMPLETED EXTRACT 
+0

間違いなく面白そうに見える、私はそれを行って、できるだけ早くあなたに戻ってきます! – WWWubzy

+0

私はそれをテストし、それは私が欲しかったのとまったく同じです!私は自分のサブクエリのためにdsetを変更し、選択を少し変更しただけで、完璧に機能しました!どうもありがとうございます! – WWWubzy

+0

さらなるテストの後、私は、不足しているエントリが月の初め(この場合は2017/08/01)でスキップし、2017/08/02で始まることに気付きました。どのように私はこの問題を解決できるかについての手がかり? – WWWubzy

関連する問題