Я пытаюсь создать запрос, чтобы выбрать всех пользователей с их последним максимальным заработанным отчетом.Я пробовал различные объединения, но я либо получаю первый максимальный отчет, либо пользователь игнорируется, если его максимальный отчет был до их последнего отчета.
Для ясности, вот примерданные, с которыми я работаю:
id user_id report_id earned
1 20 1 55
2 20 3 30
...
7 20 3 29
8 40 3 50
9 40 3 50
10 20 3 30
11 40 3 35
...
Я бы хотел выбрать последний отчет с наибольшим заработком для данного report_id для всех пользователей.Для приведенного выше примера желаемый запрос вернет
id user_id report_id earned
9 40 3 50
10 20 3 30
Однако я получаю строки с идентификаторами 2, 8, первые отчеты с максимальным заработком.
Примечания о данных:
- В первом отчете не гарантируется самый высокий заработок
- В последнем отчете не гарантируется самый высокий заработок
- Первый максимум не полученгарантированно будет последним
- Запрос должен сообщить о последнем максимуме, чтобы получить соответствующий отчет
Любая помощь с проблемой приветствуется.
Редактировать: По запросу, вот запрос, который я пытался использовать (в переводе с реальной проблемы на эту проблему могут быть некоторые синтаксические ошибки).Честно говоря, я переписывал один и тот же запрос, поэтому у меня нет всех моих попыток.
SELECT
s.id, s.user_id, s.report_id, s.earned
FROM
submission s
JOIN user u ON s.user_id = u.id
JOIN report r ON s.report_id = r.id
JOIN (SELECT
t.id AS ID, t.user_id, MAX(s.earned) AS MaxReport
FROM submission t
JOIN report r ON t.report_id = r.id
JOIN user us ON t.user_id = us.id
WHERE r.id = 3
GROUP BY t.user_id
ORDER BY ...
) BestReport ON
(s.id = BestReport.ID AND s.user_id = BestReport.user_id AND s.earned = BestReport.MaxReport
WHERE r.id = 3