根据输入的值,在表格中显示最低近似值(上一个)或更高(后续)

时间:2014-09-24 01:30:04

标签: oracle

我正在尝试选择最低值和最高值,或者在表格中的值之前或之后。 例如,我试图选择包含百分比(PERCEN_TOT)的行,大于我在搜索中传递的值。 示例:如果我在" PERCEN_TOT"中传递搜索值如果等于23,则应返回列,并且以下值或更早(根据研究)分别为" LINE"柱。 什么可以研究,是APPROX_COUNT_DISTINCT Oracle 12的功能,但是,我刚刚安装了Oracle 11。 有人可以帮帮我吗?

表格为:

CREATE TABLE INVOICE
(
  INV_NUMPED   VARCHAR2(6 BYTE),
  INV_NUMITE   NUMBER,
  INV_CODPRO   VARCHAR2(10 BYTE),
  INV_QTDITE   NUMBER,
  INV_VALITE   NUMBER,
  INV_VALTOT   NUMBER,
  SUM_VTOTAL   NUMBER,
  PERCEN_TOT   NUMBER,
  LINE         NUMBER
);

目录:

INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '029', '01209434', 48, 40.6, 
    12698.12, 1948.8, 15, 1);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '010', '01211110', 8, 50.85, 
    12698.12, 2355.6, 18, 2);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '026', '01209431', 60, 6.13, 
    12698.12, 2723.4, 21, 3);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '027', '01209432', 60, 6.13, 
    12698.12, 3091.2, 24, 4);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '028', '01209433', 60, 6.13, 
    12698.12, 3459, 27, 5);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '011', '01211109', 4, 91.61, 
    12698.12, 3825.44, 30, 6);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '004', '01211103', 4, 83.3, 
    12698.12, 4158.64, 32, 7);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '033', '01209439', 18, 18.23, 
    12698.12, 4486.78, 35, 8);
INSERT INTO INVOICE
   (INV_NUMPED, INV_NUMITE, INV_CODPRO, INV_QTDITE, INV_VALITE, 
    INV_VALTOT, SUM_VTOTAL, PERCEN_TOT, LINE)
 VALUES
   ('550830', '035', '01209440', 18, 18.23, 
    12698.12, 4814.92, 37, 9);
COMMIT;

提前致谢!

Double R

1 个答案:

答案 0 :(得分:1)

以下似乎可以满足您的要求:

SELECT *
  FROM INVOICE a
  WHERE a.PERCEN_TOT = (SELECT MAX(PERCEN_TOT)
                        FROM INVOICE
                        WHERE PERCEN_TOT < 23)
UNION ALL
SELECT a.*
  FROM INVOICE a
  WHERE a.PERCEN_TOT = (SELECT MIN(PERCEN_TOT)
                          FROM INVOICE
                          WHERE PERCEN_TOT < 23);

如果你需要找回不同的东西,请改变它。

SQLFiddle here

分享并享受。