показать последнего сотрудника, который был нанят - PullRequest
0 голосов
/ 01 декабря 2019

Мне нужно найти самых последних наемных работников, например, у меня есть таблица

INPUT

------------------------
|   name  |  hire_date |
------------------------
| Michael | 11-JAN-2010|
| Eugene  | 20-DEC-2018|
------------------------

Необходимо добавить третий столбец с '*' в одной строке с последним нанятым сотрудником

ВЫХОД

----------------------------------
|   name  |  hire_date | maxdate |
----------------------------------
| Michael | 11-JAN-2010|         |
| Eugene  | 20-DEC-2018|    *    |
----------------------------------

Ответы [ 3 ]

0 голосов
/ 01 декабря 2019

Аналитическая функция может помочь:

SQL> with test (name, hire_date) as
  2    (select 'Michael', date '2010-01-11' from dual union all
  3     select 'Eugene' , date '2018-12-20' from dual
  4    )
  5  select name,
  6         hire_date,
  7         case when rank() over (order by hire_date desc) = 1 then '*' else null end maxdate
  8  from test;

NAME    HIRE_DATE  MAXDATE
------- ---------- -------
Eugene  20-12-2018 *
Michael 11-01-2010

SQL>

Еще одна опция, без аналитической функции:

SQL> with test (name, hire_date) as
  2    (select 'Michael', date '2010-01-11' from dual union all
  3     select 'Eugene' , date '2018-12-20' from dual
  4    ),
  5  maxdate as
  6    (select max(hire_date) max_hire_date
  7     from test
  8    )
  9  select t.name,
 10         t.hire_date,
 11         case when t.hire_date = m.max_hire_date then '*' else null end maxdate
 12  from test t cross join maxdate m;

NAME    HIRE_DATE  MAXDATE
------- ---------- --------
Michael 11-01-2010
Eugene  20-12-2018 *

SQL>
0 голосов
/ 01 декабря 2019

Попробуй это.

     Select hire_date, name from( Select  
       hire_date, name, row_number 
     () over (partition by hire_date order
     by hire_date desc) rn
     from
     Table where hire_date
      =  (select max(hire_date)
      From table)) where rn=1
0 голосов
/ 01 декабря 2019

В самой последней версии Oracle используйте order by и fetch:

select e.*
from employees e
order by hire_date desc
fetch first 1 row only;

В более ранних версиях это часто реализуется с помощью подзапроса:

select e.*
from (select e.*
      from employees e
      order by hire_date desc
    ) 
where rownum = 1;

Оба они возвращают только одну строку - ваш вопрос в единственном числе. Существуют варианты, которые возвращают всех самых последних сотрудников, если есть дубликаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...