mysql max和group by in 2 table得到错误的值

时间:2018-04-04 15:24:25

标签: mysql group-by max

我要在表的用户的Logs表中获取最大值“value”用户我的查询似乎有效,但是它获取了最大值,但错误的数据时间列数据

表用户

(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

当我尝试显示datatime列时,我得到了错误的数据

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

是否可以在没有子查询的情况下解决问题? 或者我需要使用它? 如何?

考虑到我有一个庞大的数据库,快速查询更好

1 个答案:

答案 0 :(得分: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