добавление полей из таблицы при группировке

Есть две таблицы active_test_learnings и test_learnings. Я объединяю данные из двух таблиц, и группирую строки по person_id, при этом выбираю ту запись, у которой наибольший балл (MAX(tab1.score)). Вопрос, как мне вытянуть из tab1.state_id, которое будет соответствовать выбранному tab1.person_id?

SELECT 
tab1.person_id
, MAX(tab1.score) AS persScore
FROM
(SELECT
atl.person_id
,atl.assessment_name
,atl.score
,atl.state_id
FROM active_test_learnings atl
WHERE atl.assessment_id = 6978752233814311350
UNION ALL
SELECT
tl.person_id
,tl.assessment_name
,tl.score
,tl.state_id
FROM test_learnings tl
WHERE tl.assessment_id = 6978752233814311350) AS tab1

GROUP BY tab1.person_id

Ниже пример таблиц:
active_test_learnings

| person_id | state_id | score |
| --------- | -------- | ----- |
| 007       | 0        | 0     |
| 007       | 1        | 3     |

test_learnings

| person_id | state_id | score |
| --------- | -------- | ----- |
| 007       | 3        | 8     |
| 007       | 4        | 7     |  

Предложенный код объединяет данные их двух таблиц и группирует по person_id при этом выбирая строку с наибольшим score. Это то, что мне нужно. Но мне необходимо добавить в итоговую выборку так же и state_id, который соответствует выбранному person_id (с наибольшим score). Так же в таблицах есть и другие поля (не стал добавлять в пример), которые мне необходимо получать. И данные по этим полям так же должны соответствовать выбранному person_id


Ответы (1 шт):

Автор решения: vbif

например, так:

SELECT 
*
FROM
(SELECT
   *
  ,row_number() over(partition by tab1.person_id order by tab1.score desc) rating
FROM
(SELECT
atl.person_id
,atl.assessment_name
,atl.score
,atl.state_id
FROM active_test_learnings atl
WHERE atl.assessment_id = 6978752233814311350
UNION ALL
SELECT
tl.person_id
,tl.assessment_name
,tl.score
,tl.state_id
FROM test_learnings tl
WHERE tl.assessment_id = 6978752233814311350) AS tab1
) AS tab1_rated
WHERE rating=1
→ Ссылка