Выберите последнюю строку с помощью функции ROW_NUMBER - PullRequest
1 голос
/ 03 ноября 2019

Мне просто интересно, есть ли способ выбрать последнюю строку на основе функции ROW_NUMBER ()? В основном, я хотел бы выбрать для каждого отдела_id ПОСЛЕДНИЕ (макс.) Emp_id.

SELECT 
    department_id, last_name, employee_id, 
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
FROM 
    employees;

Вывод:

DEPARTMENT_ID LAST_NAME                 EMPLOYEE_ID     EMP_ID
------------- ------------------------- ----------- ----------
           10 Whalen                            200          1
           20 Hartstein                         201          1
           20 Fay                               202          2
           30 Raphaely                          114          1
           30 Khoo                              115          2
           30 Baida                             116          3
           30 Tobias                            117          4
           30 Himuro                            118          5
           30 Colmenares                        119          6
           40 Mavris                            203          1
. . .
          100 Popp                              113          6
          110 Higgins                           205          1
          110 Gietz                             206          2

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Да, вы можете добавить нисходящий порядок, а затем отфильтровать по этому столбцу:

SELECT *
FROM (
  SELECT department_id, last_name, employee_id,
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id,
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id DESC) l_emp_id 
   FROM employees
) 
WHERE l_emp_id = 1
1 голос
/ 03 ноября 2019

Используйте ваш запрос после ORDER BY employee_id DESC внутри каждого раздела и фильтра, чтобы получить 1-ую строку каждой группы:

SELECT t.department_id, t.last_name, t.employee_id
FROM (  
  SELECT department_id, last_name, employee_id, 
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY employee_id DESC) rn 
  FROM employees
) t
WHERE t.rn = 1

См. Демоверсию . Результаты:

> DEPARTMENT_ID | LAST_NAME  | EMPLOYEE_ID
> ------------: | :--------- | ----------:
>            10 | Whalen     |         200
>            20 | Fay        |         202
>            30 | Colmenares |         119
>            40 | Mavris     |         203
>           100 | Popp       |         113
>           110 | Gietz      |         206
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...