2016-01-21 64 views
-2

我有表像如下從3列顯示最小值

**Date  col1 col2 col3** 
1-jan-2016 -98 25  15 
19-jan-2016 25 -79 20 
25-dec-2015 -12 24  89 

我必須找到COL1,COL2,COL3最小值,並顯示該記錄的日期。

在這種情況下,我的結果應該是1-JAN-2016 -98

+0

刪除了'plsql'標籤和重新加標籤的使用'sql'和'oracle',因爲沒有跡象表明,存儲過程(這需要PL/SQL)需要 –

回答

0

您可以使用LEAST功能

declare 
    cursor c1 is select date_column,least(col1, col2, col3) least_value from yourtable; 
    BEGIN 
    FOR a in c1 LOOP 
    dbms_output.put_line(a.date_column || ' ' || a.least_value); 
    end loop; 
    end; 

你可以做簡單的SQL以及做在PLSQL這樣:

select x.date_column, x.least_value from 
     (select date_column, least(col1, col2, col3) least_value from yourtable) x 
      where x.least_value = (select min(least_value) from 
             (select least(col1, col2, col3) least_value from yourtable)) 
+0

嗨萬斯,謝謝您回覆,但我想從表中只有一分鐘的價值,我的結果應該是(日期和最小值)1-jan-2016 -98 –

+0

這是基本的。你可以使用min函數和一些subquerying。我更新了我的答案的sql部分 – Vance

+0

謝謝萬斯,它的工作:) –

0

可以COL1之間,COL2和COL3使用最小,MIN擺脫所有行和MIN最低.... KEEP以獲取與最小相關的日期列。

with src as 
    (select to_date(' 1-jan-2016','dd-mon-yyyy') col_d, -98 col1, 25 col2, 15 col3 from dual union all 
    select to_date('19-jan-2016','dd-mon-yyyy') col_d, 25 col1, -79 col2, 20 col3 from dual union all 
    select to_date('25-dec-2015','dd-mon-yyyy') col_d, -12 col1, 24 col2, 89 col3 from dual) 
select min(least(col1,col2,col3)) least, 
     min(col_d) keep (DENSE_RANK FIRST ORDER BY least(col1,col2,col3)) col_d 
from src;