[英]how to compare two datetime in sql oracle
我需要顯示最年長員工的姓名和最后一位員工的姓名,因此我需要比較hiring_date 的日期時間,這是我嘗試的方法但它不起作用:
SELECT ename
from emp
where hiredate = 'MIN(hiredate)' AND hiredate = 'MAX(hiredate)';
我該怎么辦?
例如:
SQL> with minimax as
2 (select min(hiredate) min_hiredate,
3 max(hiredate) max_hiredate
4 from emp
5 )
6 select e.ename, e.hiredate
7 from emp e join minimax m on e.hiredate in (m.min_hiredate, m.max_hiredate);
ENAME HIREDATE
---------- ----------
SMITH 17.12.1980
ADAMS 12.01.1983
SQL>
我會推薦窗口函數:
select *
from (
select e.*,
rank() over(order by hire_date) rn_asc,
rank() over(order by hire_date desc) rn_desc
from emp e
) e
where 1 in (rn_asc, rn_desc)
子查詢通過增加和減少雇用日期對員工進行排名,外部查詢選擇頂部和底部記錄。 這允許聯系,如果有的話。
相同的邏輯可以用最小窗口和最大窗口實現:
select *
from (
select e.*,
min(hire_date) over() min_hire_date,
max(hire_date) over() max_hire_date
from emp e
) e
where hire_date in (min_hire_date, max_hire_date)
在 Oracle 中,您可以使用“簡單”聚合查詢來執行此操作:
select max(ename) keep (dense_rank first order by hiredate asc) as oldest_employee,
max(ename) keep (dense_rank first order by hiredate desc) as newest_employee
from emp;
如果您想在不同的行上顯示此信息,也可以使用union all
:
(select name, hiredate
from emp
order by hiredate
fetch first 1 row only
) union all
(select name, hiredate
from emp
order by hiredate desc
fetch first 1 row only
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.