2014-03-30 70 views
0

任何人都可以告訴我什麼是相同值的聚合函數max的結果? 假設我有一個creation_date列作爲varchar2包含日期。如果我嘗試max(creation_date)什麼是結果,它將如何選擇row.Is如果在where子句子查詢中使用this,行是可預測的還是不可行?oracle中導致的聚合函數11g

完整的查詢是這樣的。

從my_table創建ID,其中create_date =(從我的表中選擇max(create_date));

+0

你想實現什麼?如果你想獲得最新的日期,那麼'MAX(create_date)'不會給你想要的。您將需要首先將'varchar2'轉換爲'date'。 –

+0

好吧..你給我提示。我只想知道如何oracle集合函數選擇任何行如果每個值都相同 – user3004656

+0

它會返回其中一個值(它將始終返回一個值),但是沒有辦法預測它們中的哪一個會返回。例如:'SELECT MAX(col)FROM tbl'其中'tbl.col'具有值(1,2,1,4),它將返回1.現在是第一行還是第三行的1?沒辦法告訴。 –

回答

1

不太清楚你想達到什麼目的。 讓我們說有一個表my_table,其數據如下所示。 (注意最後兩行在日期列中有相同的數據)

SQL> select * from my_table;

CREATE_ID CREATE_DATE   CREATE_DATE_VARCHAR 
---------- ------------------- -------------------- 
     1 1996-07-25 00:00:00 1996-07-25 00:00:00 
     2 1997-07-26 00:00:00 1997-07-26 00:00:00 
     3 2013-07-26 00:00:00 2013-07-26 00:00:00 
     4 2013-07-26 00:00:00 2013-07-26 00:00:00 

如果執行select * from my_table where create_date_varchar=(Select max(create_date_varchar) from my_table);,那麼你會得到2條(ID 3和4)

CREATE_ID CREATE_DATE   CREATE_DATE_VARCHAR 
---------- ------------------- -------------------- 
     3 2013-07-26 00:00:00 2013-07-26 00:00:00 
     4 2013-07-26 00:00:00 2013-07-26 00:00:00 

如果你只需要一個被然後拿起你可以使用ROWNUM = 1 select * from my_table where create_date_varchar=(Select max(create_date_varchar) from my_table) and ROWNUM = 1; 那麼你將得到1個結果(無論是3或4,這可以通過使用順序子句來控制)

檢查:http://sqlfiddle.com/#!4/8d75a/3

請參閱Max Function 要了解更多有關排序的工作原理是指NLS_SORTWhy does Oracle's varchar sort order not match the behavior of varchar comparison?

+0

謝謝你......這就是我想知道的。 – user3004656

+0

@ user3004656而這與我在評論中對你的回答完全相同。然而,考沙爾做了一個不錯的額外努力爲你打造一個完整的例子。 –