#Oracle11gでのSELECT文に関する質問です。
下記のような店舗マスタがあります。
店舗の廃止がありますし、店舗コードが同じでも店舗名が変わります。
適用日単位でまとめられています。
店舗コード | 店舗名 | 適用日 |
---|---|---|
1 | A店 | 2019/06/01 |
2 | B店 | 2019/06/01 |
3 | C店 | 2019/06/01 |
1 | A1店 | 2019/09/01 |
2 | B1店 | 2019/09/01 |
4 | D1店 | 2019/09/01 |
1 | A2店 | 2019/10/01 |
2 | B2店 | 2019/10/01 |
5 | E2店 | 2019/10/01 |
例えば、2019/06/01時点で存在するのは、「A店、B店、C店」です。
2019/07/01時点で存在するのも、「A店、B店、C店」です。
2019/09/01時点で存在するのは、「A1店、B1店、D1店」です。「C店」は廃止です。
2019/10/01時点で存在するのは、「A2店、B2店、E2店」です。「D1店」は廃止です。
このテーブル、適用終了日列が定義されていれば簡単なんですが。。。
指定した日付を範囲指定しての店舗を取得するのに苦労しています。
例えば、2019/08/30~2019/09/01の期間に存在する店舗(店舗名込み)を、出来るだけ完結なSQLで記述したいです。
分析関数とか駆使すれば、一度に取得できるんでしょうが、どう組むべきかわからずです。
######取得したい結果
検索日付 | 店舗コード | 店舗名 | 適用日 |
---|---|---|---|
2019/08/30 | 1 | A店 | 2019/06/01 |
2019/08/30 | 2 | B店 | 2019/06/01 |
2019/08/30 | 3 | C店 | 2019/06/01 |
2019/08/31 | 1 | A店 | 2019/06/01 |
2019/08/31 | 2 | B店 | 2019/06/01 |
2019/08/31 | 3 | C店 | 2019/06/01 |
2019/09/01 | 1 | A1店 | 2019/09/01 |
2019/09/01 | 2 | B1店 | 2019/09/01 |
2019/09/01 | 4 | D1店 | 2019/09/01 |
#create、insert文
sql
1CREATE TABLE M_SHOP 2( 3 SHOP_ID NUMBER(3,0) NOT NULL, 4 SHOP_NAME VARCHAR2(60) NOT NULL, 5 APLY_DATE VARCHAR2(8) NOT NULL 6); 7 8 9insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (1,'A店','20190601'); 10insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (2,'B店','20190601'); 11insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (3,'C店','20190601'); 12insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (1,'A1店','20190901'); 13insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (2,'B1店','20190901'); 14insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (4,'D1店','20190901'); 15insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (1,'A2店','20191001'); 16insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (2,'B2店','20191001'); 17insert into M_SHOP(SHOP_ID,SHOP_NAME,APLY_DATE) values (5,'E2店','20191001'); 18
回答2件
あなたの回答
tips
プレビュー