PostgreSQLで2つのテーブル間において、管理IDと日付を基にleft joinをしたいと考えています。
以下表のテーブルAは日付が歯抜けない状態になっていますが、
テーブルBは日付が歯抜けになっており、単純にleft joinした場合、
該当日付がない場合はnullになってしまうかと思います。
そうではなく、該当日付がない場合は一番直前の日付のレコードをjoinさせたいと考えているのですが、
上手い方法が思いつきません。
お力を貸していただけますと幸いです。
joinするイメージとしては、
例えばテーブルBの管理ID:Aは2020/02/01はレコードがない為、
テーブルAの管理ID:A、2020/02/01のレコードについては、
一番直前の2020/01/31のレコードをjoinしたいです。
■テーブルA
日付 | 管理ID | 数値A |
---|---|---|
2020/01/31 | A | 9 |
2020/02/01 | A | 7 |
2020/02/02 | A | 2 |
2020/02/03 | A | 4 |
2020/02/04 | A | 2 |
2020/02/05 | A | 3 |
2020/01/31 | B | 1 |
2020/02/01 | B | 2 |
2020/02/02 | B | 2 |
2020/02/03 | B | 1 |
2020/02/04 | B | 6 |
2020/02/05 | B | 1 |
■テーブルB
日付 | 管理ID | 数値B |
---|---|---|
2020/01/31 | A | 10 |
2020/02/02 | A | 11 |
2020/02/05 | A | 12 |
2020/01/31 | B | 20 |
2020/02/01 | B | 21 |
2020/02/05 | B | 22 |
■結合後テーブル(Aを基にBをleft join)
日付 | 管理ID | 数値A | 数値B |
---|---|---|---|
2020/01/31 | A | 9 | 10 |
2020/02/01 | A | 7 | 10 |
2020/02/02 | A | 2 | 11 |
2020/02/03 | A | 4 | 11 |
2020/02/04 | A | 2 | 11 |
2020/02/05 | A | 3 | 12 |
2020/01/31 | B | 1 | 20 |
2020/02/01 | B | 2 | 21 |
2020/02/02 | B | 2 | 21 |
2020/02/03 | B | 1 | 21 |
2020/02/04 | B | 6 | 21 |
2020/02/05 | B | 1 | 22 |
回答2件
あなたの回答
tips
プレビュー