你知道(或您发现本练习),最和GREATEST的工作方式与MIN和MAX不一样。他们似乎也做同样的事情,对于连续的值而不是列。但MIN和MAX忽略空值,而LEAST和GREATEST则不会。
利用MIN和MAX(而不是LEAST和GREATEST)的一种方法是UNPIVOT基表,然后使用标准聚合。但是,警告:基表中的数据已经按“行ID”分组。通过不透明,您将失去这些信息,并且Oracle需要再次分组,就好像数据未被分组一样。这种方法的
select row_id, emp_nm, dept_nm, max(dt) as most_recent_date
from job_date_values
unpivot (dt for descr in (job_start_dt, job_end_dt, job_promo_dt, job_demo_dt))
group by row_id, emp_nm, dept_nm
;
ROW_ EMP_NM DEPT_NM MOST_RECENT_DATE
---- ------ ------- ----------------
1-E4 123 SALES 10-OCT-2015
1-E5 234 FIN 01-JAN-2015
一个优点,不过,是你还可以包括是最近日期的类型(是的job_start_date?job_promo_date?等),你可以做到这一点通过向SELECT子句:
select row_id, ... , ... as most recent_date,
max(descr) keep (dense_rank last order by dt) as descr
预期结果是什么? –
@vkp我需要在每个分支的员工可用日期中获取最大日期。 –
如果作者没有显示被尝试的内容,为什么你会认为他们尝试了什么?要么要求提供一些特定的信息,要么提出具体的改进,要么停机后继续前进。 –