@number09

Как составить sql запрос?

В таблице есть три поля

DOCUMENT_ID               JOB_ID          PERSON_ID
         1                  2             18
         1                  3             16
         2                  4             12
         2                  5             27


как выбрать каждое уникальное значение DOCUMENT_ID с самым высоким значением JOB_ID и соответствующим PERSON_ID ?

что бы было:

DOCUMENT_ID        JOB_ID          PERSON_ID
        
      
  1                  3             16

         
  2                  5             27


Сам я могу только так:
SELECT
DISTINCT document_id, MAX(job_id) OVER (PARTITION BY document_id)
FROM my_table;


а как сюда данные из третьего столбца закинуть я не знаю.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
WITH
cte AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY document_id ORDER BY job_id DESC) rn
  FROM my_table
  )
SELECT document_id, job_id, person_id
FROM cte 
WHERE rn = 1;

И в качестве бонуса
SELECT DISTINCT 
       document_id,
       MAX(job_id) OVER (PARTITION BY document_id) job_id,
       FIRST_VALUE(person_id) OVER (PARTITION BY document_id ORDER BY job_id DESC) person_id
FROM my_table
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
SELECT m.DOCUMENT_ID, m.JOB_ID, p.PERSON_ID
  FROM (SELECT DOCUMENT_ID, MAX(JOB_ID) AS JOB_ID
          FROM my_table GROUP BY DOCUMENT_ID ) AS m
  JOIN my_table AS p ON m.DOCUMENT_ID = p.DOCUMENT_ID AND m.JOB_ID = p.JOB_ID
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы