Jus*_*ave 13
MIN
将返回最小的非 NULL 值。查询不会抛出错误,它会简单地忽略 NULL 值
SQL> with x as (
2 select null dt from dual union all
3 select sysdate from dual
4 )
5 select min(dt)
6 from x;
MIN(DT)
---------
21-OCT-11
Run Code Online (Sandbox Code Playgroud)
假设某些日期为空
为了完整起见,我还假设可能有零行
我正在使用这个测试数据:
create table t as
select to_date('20110101', 'YYYYMMDD')+level-1 as d from dual connect by level<=5
union all select null from dual;
select * from t;
D
-------------------------
01-JAN-11 00.00.00
02-JAN-11 00.00.00
03-JAN-11 00.00.00
04-JAN-11 00.00.00
05-JAN-11 00.00.00
(null)
Run Code Online (Sandbox Code Playgroud)
并考虑以下情况:
一些行但没有null
值:
select min(d) from t where d is not null;
MIN(D)
-------------------------
01-JAN-11 00.00.00
Run Code Online (Sandbox Code Playgroud)一些行以及两者null
和非null
值:
select min(d) from t;
MIN(D)
-------------------------
01-JAN-11 00.00.00
Run Code Online (Sandbox Code Playgroud)一些行和所有值是null
:
select min(d) from t where d is null;
MIN(D)
-------------------------
(null)
Run Code Online (Sandbox Code Playgroud)没有行:
select min(d) from t where 1=2;
MIN(D)
-------------------------
(null)
Run Code Online (Sandbox Code Playgroud)一个有趣的边缘情况,group by
它不返回任何行:
select min(d) from t where 1=2 group by 1;
MIN(D)
-------------------------
Run Code Online (Sandbox Code Playgroud)旁白:我没有用作date
别名,因为 Oracle 抱怨(并非不合理的 IMO):
select to_date('20110101', 'YYYYMMDD') as date from dual;
ORA-00923: FROM keyword not found where expected
Run Code Online (Sandbox Code Playgroud)