首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

Oracle 取最大值有关问题求教

2012-03-28 
Oracle 取最大值问题求教select greatest(i.Fdate,u.Fdate,p.Fdate) from table_a i,table_b u,table_c pi

Oracle 取最大值问题求教
select greatest(i.Fdate,u.Fdate,p.Fdate) from table_a i,table_b u,table_c p
i.Fdate,u.Fdate,p.Fdate都是DATE类型
若i.Fdate是空值 u.Fdate,p.Fdate不为空 那么这个greatest就会出现 只能取得空值 

我想达到 i.Fdate,u.Fdate,p.Fdate都为空 那么就取空值  
其中一个不为空就取该值 
若是 其中1个为空 则取其余2个比较后的最大值 
这个有什么解决办法?或者其他实现方法啊

[解决办法]
用 nvl + greatest + case when 试试

实现原理
nvl(字段, 历史上最小的那天,如公元一年)
—> greatest (nvl 之后的所有字段)
—> case when 公元一年,换回 空值

SQL code
WITH tmp AS(     --SELECT NULL a_date, SYSDATE b_date, SYSDATE + 1 c_date FROM dual     SELECT NULL a_date, NULL b_date, NULL c_date FROM dual)SELECT CASE WHEN         greatest(               nvl(a_date,to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS'))               ,nvl(b_date,to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS'))               ,nvl(c_date,to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS'))               ) = to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS')               THEN NULL                ELSE greatest(               nvl(a_date,to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS'))               ,nvl(b_date,to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS'))               ,nvl(c_date,to_date('00010101 00:00:00','YYYYMMDD HH24:MI:SS'))               )               END            FROM tmp 

热点排行