範囲を持つDataSetとの JOINをETLで実現したい

ユーザー02879
編集済: 5月 2023 仲間に相談

「1件データ」と「日付の範囲を持つDataSet」との JOINを ETLで実現したいです。

 

ある店の「販売履歴DataSet」は次の通りです。
販売日 |品名 |個数
3月01日|りんご|1個
3月01日|みかん|1個
3月15日|りんご|2個
3月15日|みかん|2個
3月25日|りんご|3個
3月25日|みかん|3個
3月31日|りんご|4個
3月31日|みかん|4個

 

りんごは通常1個300円ですが、3月11日から20日までは200円に値下げしました。また31日は特売で100円で売りました。
みかんは通常1個250円ですが、月の後半は150円に値下げしました。

 

この情報を持つ「単価DataSet」は次の通りです。
 品名|開始日 | 終了日|単価
りんご|3月01日|3月10日|300円
りんご|3月11日|3月20日|200円
りんご|3月21日|3月30日|300円
りんご|3月31日|3月31日|100円
みかん|3月01日|3月15日|250円
みかん|3月16日|3月31日|150円

 

売上金額を求めるロジックは
【販売履歴DataSetと「品名が同じ」かつ「販売日が開始日と終了日の間に含まれる」単価DataSetのレコードを JOINして単価と数量を乗算する】
となります。

 

開始日以降かつ終了日以前のような SQL文での BETWEEN演算子に当たる複数条件フィルタは ETLでは同一DataSetでしか掛けらないようで、また 複数条件での JOINでは範囲指定が出来ないようで いい方法が浮かびません。

 

ETLでの実現アイデアをご教示頂けると幸いです。

 

コメント

  • 落とし穴はあるかもしれませんが、思いついたので共有しますね!

     

    ①品名のみで結合 ※多対多の結合なので行が増幅する

    ②行をフィルタで以下条件をすべてに一致するを指定

     (1)販売履歴Datasetの日付が単価DataSetの開始日以上(列からの値)

     (2)販売履歴Datasetの日付が単価DataSetの終了日以下(列からの値)

     

    でも、やっぱりこの手の処理はSQLでやりたいですね。笑