Как написать SQL запрос?

Как выбрать уникальные значения поля DOCUMENT_ID с наибольшими значениями поля JOB_ID и соответствующими значениями поля PERSON_ID из данной таблицы?

Примерный ожидаемый результат:

DOCUMENT_ID        JOB_ID          PERSON_ID
        
      
  1                  3             16

         
  2                  5             27

Я уже попробовал использовать следующий SQL-запрос:
SELECT DOCUMENT_ID, MAX(JOB_ID), PERSON_ID
FROM my_table
GROUP BY DOCUMENT_ID;

Однако, это не дало ожидаемых результатов, так как поле PERSON_ID не участвует в агрегатной функции MAX. Как я могу включить значения поля PERSON_ID в результаты запроса?
  • 21 сентября 2023 г. 6:28
Ответы на вопрос 3
Для решения этой задачи можно использовать подзапрос в SQL запросе. 

Вот SQL запрос, который вернет уникальные значения поля DOCUMENT_ID с наибольшими значениями поля JOB_ID и соответствующими значениями поля PERSON_ID:

SELECT t1.DOCUMENT_ID, t1.JOB_ID, t1.PERSON_ID
FROM my_table t1
WHERE t1.JOB_ID = (SELECT MAX(t2.JOB_ID) FROM my_table t2 WHERE t2.DOCUMENT_ID = t1.DOCUMENT_ID)
ORDER BY t1.DOCUMENT_ID;

В данном запросе мы используем таблицу my_table дважды: первый раз для сравнения поля JOB_ID, и второй раз для сравнения поля DOCUMENT_ID. 

В подзапросе мы выбираем максимальное значение JOB_ID для каждого значения DOCUMENT_ID. 

В основном запросе мы выбираем только те строки, где JOB_ID равно максимальному значению из подзапроса. 

Кроме того, мы ограничиваем результаты только уникальными значениями DOCUMENT_ID, используя ключевое слово DISTINCT или GROUP BY. 

И наконец, мы сортируем результаты по значению DOCUMENT_ID.

Теперь этот запрос должен вернуть ожидаемый результат.
m.DOCUMENT_ID, m.JOB_ID, p.PERSON_ID 
 p.PERSON_ID, m.JOB_ID, p.PERSON_ID
Похожие вопросы