1

如果我只需要排序,如何从表中获取previous或product_id?例如,如果我有和,我想获得下一条记录并且我有和,我想获得上一条记录 我怎样才能做到这一点?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 回答