Я должен получить максимальное значение "значение" в таблице "Журналы" для пользователя в таблице. Мой запрос, похоже, работает, но он выбирает максимальное значение, но неверные данные столбца данных
пользователи таблицы
(primary+
unique)
name | current_list | other_columns
-----------------------------------------
george 1 data
carl 2 data
paul 1 data
таблицы журналов
user | list | value | datatime
-------------------------------------
george 1 4 2018-01-01
paul 1 7 2018-01-02
carl 2 3 2018-01-03
george 1 5 2018-01-04
paul 2 5 2018-01-05
carl 2 6 2018-01-06
carl 3 8 2018-01-07
george 2 9 2018-01-08
paul 1 8 2018-01-09
george 1 3 2018-01-10
Результаты должны быть (верхнее значение в списке выбрано "current_list")
user | other_columns | top | datatime
---------------------------------------------
george data 5 2018-01-04
paul data 8 2018-01-09
carl data 6 2018-01-06
когда я пытаюсь показать столбец данных, я тоже получаю неправильные данные
SELECT Logs.datatime,
Users.*,
MAX(Logs.value)
FROM Users, Logs
WHERE Users.current_list = Logs.list
and Users.name = Logs.user
group by Logs.user
возможно решить проблему без подзапроса? или мне нужно его использовать? как?
что у меня есть огромная база данных, поэтому быстрый запрос лучше
Сначала вам нужно найти самое большое значение для каждого.
SELECT U.name, U.current_list, MAX(L.value) as m_value
FROM Users U
JOIN Logs U
ON U.name = L.user
AND U.current_list = L.list
GROUP BY U.name, U.current_list
Затем заполните остальные поля.
SELECT U.*, L.Value
FROM Users U
JOIN Logs U
ON U.name = L.user
AND U.current_list = L.list
JOIN ( SELECT U.name, U.current_list, MAX(L.value) as m_value
FROM Users U
JOIN Logs U
ON U.name = L.user
AND U.current_list = L.list
GROUP BY U.name, U.current_list
) T
ON U.name = T.name
AND U.current_list = L.current_list
AND L.value= T.m_value
GROUP BY
. Прочитай это. dev.mysql.com/doc/refman/5.7/en/group-by-handling.html