MySQL Max и сгруппировать в 2 таблицы получить неправильные значения

0

Я должен получить максимальное значение "значение" в таблице "Журналы" для пользователя в таблице. Мой запрос, похоже, работает, но он выбирает максимальное значение, но неверные данные столбца данных

пользователи таблицы

(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

возможно решить проблему без подзапроса? или мне нужно его использовать? как?

что у меня есть огромная база данных, поэтому быстрый запрос лучше

  • 0
    «mysql max и group by в 2 таблице получают неправильные значения» Да, потому что вы используете GROUP BY неправильно .. прочитайте psce.com/en/blog/2012/05/15/…
  • 0
    Вы неправильно используете пресловутое нестандартное расширение MySQL для GROUP BY . Прочитай это. dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
Показать ещё 1 комментарий
Теги:
group-by
max

1 ответ

1
Лучший ответ

Сначала вам нужно найти самое большое значение для каждого.

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
  • 1
    @RaymondNijland исправлено
  • 0
    Мне не нужно максимальное время данных, мне нужно максимальное значение Log.value для каждого пользователя в выбранном списке с правильным полем времени данных
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню