任何人都可以告诉我,对于相同的值,聚合函数max的结果是什么? 假设我有一个creation_date列,其中包含日期为varchar2。如果我尝试max(creation_date)将会产生什么结果以及如何选择row.Is如果在where子句子查询中使用它,行是否可预测?
完整的查询就是这个。
从my_table创建id,其中create_date =(从我的表中选择max(create_date));
答案 0 :(得分: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_SORT和 Why does Oracle's varchar sort order not match the behavior of varchar comparison?