簡體   English   中英

如何比較sql oracle中的兩個日期時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM