SQLでのデータ作成

前提

SQL(Oracle)でデータを編集しています。
想定したデータにならず、お知恵をお借りできますと幸いです。
以下の私が考えていた以外の方法でも、やり方があればご教示いただきたく思います。
よろしくお願いします。

実現したいこと

週次でシステムからCaseのデータを記録しており、以下のTable1のようなデータを作成しています。ですが、システム上クローズ後にはデータが作成されなくなるため、Table2のようなデータを作ろうとしています。データの記録日は毎月1、8、15、22、29(2月は28日)です。

■Table1
Case No  date   stage   last flag
Case1  20220101  ステージ1  N
Case1  20220108  ステージ1  N
Case1  20220115  ステージ2  N
Case1  20220122  ステージ4  N
Case1  20220129  ステージ5  N
Case1  20220201  クローズ   Y

Case2  20220108  ステージ3  N
Case2  20220115  ステージ4  N
Case2  20220122  クローズ   Y

■Table2
Case No  date   stage   last flag
Case1  20220101  ステージ1  
Case1  20220108  ステージ1  
Case1  20220115  ステージ2  
Case1  20220122  ステージ4  
Case1  20220129  ステージ5  
Case1  20220201  クローズ   
Case1  20220208  クローズ   
以下続く

Case2  20220108  ステージ3  
Case2  20220115  ステージ4  
Case2  20220122  クローズ   
Case2  20220129  クローズ   
Case2  20220201  クローズ   
Case1  20220208  クローズ   
以下続く

該当のソースコード

Create TABLE Table2
SELECT
dt.date
tr.*
from 日付マスタ dt
LEFT JOIN Table1 tr
ON dt.date = tr.date
;

試したこと

日付マスタを作ってそれを左表にしてTable1と結合すれば、日付の右にNULLのセルができ、そこに、Table1のLast flagがついているデータを追加すればできるかと思っていたのですが、うまくいかずどうすればよいか困っているところです。上のSQLで下のような表ができたらいいなと思っていまいた。

イメージ
Case No  date   stage   last flag

20220108  Case2  20220108  ステージ3  N
20220115  Case2  20220115  ステージ4  N
20220122  Case2  20220122  クローズ   Y
20220129  
20220201  

Last flag Yのみを集めたTableもあり、ここから上表のnullを埋めようとしていましたが、上表が作れず挫折しています。
Case1  20220201  クローズ   Y
Case2  20220122  クローズ   Y

よろしくお願いします。

コメントを投稿

0 コメント