2014-09-24 27 views
0

我試圖選擇最低和最高值,或者在表中的值之前或之後。 例如,我試圖選擇包含百分比(PERCEN_TOT)的行,大於我在搜索中傳遞的值。 示例:如果我將「PERCEN_TOT」中的搜索值傳遞等於23,則應該返回列,並且以下值或更早(根據研究)分別爲「LINE」列的3或4。 有什麼可以研究的,是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; 

提前感謝!

雙R

+0

提供預期的輸出請 – zaratustra 2014-09-24 10:09:13

回答

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

分享和享受。

+0

謝謝!解決了我的問題;) – 2014-09-24 16:50:22