1

並べ替えるだけでよい場合、テーブルから product_idを取得するにはどうpreviousすればよいですか? 例 と がある場合、次のレコードを取得したい とがある場合、前のレコードを取得したい どうすればこれを達成できますか?nextvarcharPRODUCT_NO='20120033'PRODUCT_REGISTRATION_NO='yellow'PRODUCT_ID which is 4PRODUCT_NO='20120033'PRODUCT_REGISTRATION_NO='green'PRODUCT_ID which is 3

ありがとう

テーブル構造とデータを以下に貼り付けます

CREATE TABLE MYTAB
(
  PRODUCT_ID               NUMBER,
  PRODUCT_NO               VARCHAR2(),
  PRODUCT_REGISTRATION_NO  VARCHAR2(32)
);


SET DEFINE OFF;
Insert into MYTAB
   (PRODUCT_ID, PRODUCT_NO, PRODUCT_REGISTRATION_NO)
 Values
   (3, '20120033', 'yellow');
Insert into MYTAB
   (PRODUCT_ID, PRODUCT_NO, PRODUCT_REGISTRATION_NO)
 Values
   (4, '20120033', 'green');
Insert into MYTAB
   (PRODUCT_ID, PRODUCT_NO, PRODUCT_REGISTRATION_NO)
 Values
   (5, '20120034', 'wine');
Insert into MYTAB
   (PRODUCT_ID, PRODUCT_NO, PRODUCT_REGISTRATION_NO)
 Values
   (6, '20120034', 'soda');
COMMIT;
4

1 に答える 1

3

lag() および lead() 関数を使用します。

select *
from (
    select product_id,
           product_no,
           product_registration_no, 
           lag(product_id) over (partition by product_no order by product_id) as prev_id,
           lead(product_id) over (partition by product_no order by product_id) as next_id
    from mytab
) 
where product_no='20120033' 
and product_registration_no='green' 

「前」と「次」の概念は、ソートする条件を指定できる場合にのみ意味があることに注意してください。それorder by product_idが、ウィンドウ定義の が行うことです。

于 2012-05-31T09:15:39.800 に答える