回答編集履歴
3
補完
answer
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
分析関数の[LEAD](https://docs.microsoft.com/ja-jp/sql/t-sql/functions/lead-transact-sql?view=sql-server-2017)を使用して加算テーブルの適用月の範囲情報を求めたものと結合します。
|
2
2
|
```SQL
|
3
|
-
select t1.*, t2.ポイント
|
3
|
+
select t1.*, coalesce(t2.ポイント, 0) ポイント
|
4
4
|
from 結果テーブル t1
|
5
5
|
left join (
|
6
6
|
select *, lead(適用月, 1, '999999') over(partition by 等級 order by 適用月) 次適用月
|
7
7
|
from 加算テーブル
|
8
8
|
) t2
|
9
|
-
on t1.等級=t2.等級 and t1.実施月 >= t2.適用月 and t1.実施月 < t2.次適用月
|
9
|
+
on t1.等級 = t2.等級 and t1.実施月 >= t2.適用月 and t1.実施月 < t2.次適用月
|
10
10
|
```
|
11
11
|
上記では、**lead**により次のデータが無い場合の値を`999999`とすることで範囲が判定されるようにしています。
|
2
訂正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
select t1.*, t2.ポイント
|
4
4
|
from 結果テーブル t1
|
5
5
|
left join (
|
6
|
-
select *, lead(適用月, 1, 999999) over(partition by 等級 order by 適用月) 次適用月
|
6
|
+
select *, lead(適用月, 1, '999999') over(partition by 等級 order by 適用月) 次適用月
|
7
7
|
from 加算テーブル
|
8
8
|
) t2
|
9
9
|
on t1.等級=t2.等級 and t1.実施月 >= t2.適用月 and t1.実施月 < t2.次適用月
|
1
訂正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
select t1.*, t2.ポイント
|
4
4
|
from 結果テーブル t1
|
5
5
|
left join (
|
6
|
-
select *, lead(適用月, 1, 999999) over(partition by 等級
|
6
|
+
select *, lead(適用月, 1, 999999) over(partition by 等級 order by 適用月) 次適用月
|
7
7
|
from 加算テーブル
|
8
8
|
) t2
|
9
9
|
on t1.等級=t2.等級 and t1.実施月 >= t2.適用月 and t1.実施月 < t2.次適用月
|