你知道(或您發現本練習),最和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我需要在每個分支的員工可用日期中獲取最大日期。 –
如果作者沒有顯示被嘗試的內容,爲什麼你會認爲他們嘗試了什麼?要麼要求提供一些特定的信息,要麼提出具體的改進,要麼停機後繼續前進。 –