ORACLE 12cを使用しています。
作業履歴テーブルがあり、
指定期間の作業履歴とその作業より前日以前の作業履歴を並列して出力したいです。
【テーブル】
SAGYORIREKI(主キー:SEIHIN, SAGYODATE, SEQ)
lang
1 2CREATE TABLE SAGYORIREKI 3( 4 SEIHIN VARCHAR2(30) NOT NULL, 5 SAGYODATE DATE NOT NULL, 6 SEQ NUMBER(03) DEFAULT 0 NOT NULL, 7 NAIYO VARCHAR2(100) DEFAULT NULL , 8 CONSTRAINT SAGYORIREKI_PKEY PRIMARY KEY (SEIHIN, SAGYODATE, SEQ) USING INDEX TABLESPACE INDEX01 9) TABLESPACE USERS; 10 11INSERT INTO SAGYORIREKI VALUES ('AAA', '2016/10/01', 1, '洗浄'); 12INSERT INTO SAGYORIREKI VALUES ('AAA', '2017/09/20', 1, '洗浄'); 13INSERT INTO SAGYORIREKI VALUES ('AAA', '2017/09/20', 2, 'パーツ交換'); 14INSERT INTO SAGYORIREKI VALUES ('AAA', '2018/05/06', 1, 'オーバーホール'); 15INSERT INTO SAGYORIREKI VALUES ('BBB', '2017/06/05', 1, '洗浄'); 16INSERT INTO SAGYORIREKI VALUES ('BBB', '2017/06/05', 2, '補修'); 17INSERT INTO SAGYORIREKI VALUES ('BBB', '2018/12/22', 1, '洗浄'); 18INSERT INTO SAGYORIREKI VALUES ('CCC', '2018/01/07', 1, '洗浄'); 19INSERT INTO SAGYORIREKI VALUES ('CCC', '2018/10/14', 1, 'パーツ交換'); 20INSERT INTO SAGYORIREKI VALUES ('CCC', '2019/02/10', 1, 'パーツ交換');
【出力イメージ】
2017/06/01~2018/11/30間の製品ごとの作業履歴とその1つ前の作業履歴を表示したい。
製品 , 作業日 , SEQ, 作業内容 , 前回作業日, 前回SEQ
――――――――――――――――――――――――――――――――――――――――――――――――――――――――
AAA , 2017/09/20, 1 , 洗浄 , 2016/10/01, 1
AAA , 2017/09/20, 2 , パーツ交換 , 2016/10/01, 1
AAA , 2018/05/06, 1 , オーバーホール, 2017/09/20, 2
BBB , 2017/06/05, 1 , 洗浄 ,
BBB , 2017/06/05, 2 , 補修 ,
CCC , 2018/10/14, 1 , パーツ交換 , 2018/01/07, 1
――――――――――――――――――――――――――――――――――――――――――――――――――――――――
試したこと
以下のようなSQLで実装したのですが、レスポンスがあまりに遅かった為、伺った次第です。
lang
1SELECT D.SEIHIN, 2 D.SAGYODATE, 3 D.SEQ, 4 D.NAIYO 5 (SELECT MAX(SAGYODATE) FROM SAGYORIREKI 6 WHERE SEIHIN = D.SEIHIN 7 AND SAGYODATE < D.SAGYODATE 8 GROUP BY SEIHIN) 9 AS SAGYODATE2, 10 (SELECT MAX(SEQ) FROM SAGYORIREKI 11 WHERE (SEIHIN, SAGYODATE) IN (SELECT SEIHIN, MAX(SAGYODATE) FROM SAGYORIREKI 12 WHERE SEIHIN = D.SEIHIN 13 AND SAGYODATE < D.SAGYODATE 14 GROUP BY SEIHIN) 15 GROUP BY SEIHIN, SAGYODATE) AS SEQ2 16FROM SAGYORIREKI 17WHERE SAGYODATE BETWEEN TO_DATE('2017/06/01','YYYY/MM/DD') 18 AND TO_DATE('2018/11/30','YYYY/MM/DD')
どのようなSQL文で実現したらよいかご教授賜りたく、何卒宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー