##やりたいこと
以下のようなデータをSQLで抽出すること。
◆作りたいデータ(要点抜粋)
ID | 基準日 | 入力日 | 入力データ |
---|---|---|---|
101 | 1/1 | 12/30 | A |
101 | 1/8 | 12/30 | A |
101 | 1/15 | 1/12 | B |
101 | 1/22 | 1/12 | B |
101 | 1/29 | 1/29 | C |
102 | 1/1 | 12/27 | D |
102 | 1/8 | 1/4 | E |
102 | 1/15 | 1/4 | E |
102 | 1/22 | 1/22 | F |
102 | 1/29 | 1/22 | F |
上記を構成する元データは以下のような形である。
◆元データ(要点抜粋)
ID | 入力日 | 入力データ |
---|---|---|
101 | 12/30 | A |
101 | 1/12 | B |
101 | 1/29 | C |
102 | 12/27 | D |
102 | 1/4 | E |
102 | 1/22 | F |
◆カレンダー(追記しました)
日付 | 曜日 |
---|---|
1/1 | 金 |
1/2 | 土 |
1/3 | 日 |
1/4 | 月 |
1/5 | 火 |
1/6 | 水 |
以降省略
つまり要件としては、
・基準日以前で最も新しい入力日
・その際の入力データ
の2点を、基準日ごとに抽出することである。
※基準日について
・毎週金曜日を基準日として考える。
・基準日はカレンダーのデータベースから取得する。
・毎週の入力日について、金曜日にチェックできるようにする。
・基準日ごとに最新の入力日と入力データを取得する。
##うまくいかないポイント
以下のようなSQLを記載したが、データが途中で途切れてしまう。
select ID,入力日,入力データ,カレンダー.日付 --「元データ」は省略します from 元データ a1 cross join カレンダー join( select ID,MAX(入力日) from 元データ group by ID) a2 on a1.ID=a2.ID and a1.入力日=a2.入力日 where カレンダー.曜日 = 金 and a1.入力日 <= カレンダー.日付
出力されるデータは以下のような形である。
ID | 基準日 | 入力日 | 入力データ |
---|---|---|---|
101 | 1/15 | 1/12 | B |
101 | 1/22 | 1/12 | B |
101 | 1/29 | 1/29 | C |
102 | 1/8 | 1/4 | E |
102 | 1/15 | 1/4 | E |
102 | 1/22 | 1/22 | F |
102 | 1/29 | 1/22 | F |
##質問
・データが途切れる要因は何か
→ものによって途切れる場所が異なる。
→nullはなし。
・改善するために必要な句・ポイントは何か
##環境
Windows10
Amazon Reshift
PowerBI
以上で発生。
以上です。
初学者なので根本的に理解が及んでいない点があるかもしれないですが、要点ご教授いただけると助かります。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー