mysql max 和 group by 在 2 个表中得到错误的值

标签 mysql group-by max

我必须在“用户”表中的“日志”表中获取用户的最大值“值”,我的查询似乎有效,但它获取了最大值,但数据时间列数据错误

表用户

(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

关于mysql max 和 group by 在 2 个表中得到错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49654855/

相关文章:

python - 从数字列表中返回 3 个最大值的函数出错

C 程序使用函数查找两个数字之间的最大值和最小值

php - 如何以 'reusable' 的方式将参数传递给数组中的 PDO SELECT 语句?

mysql - 在 MySql 中按值返回分组

php - 两个日期之间的MySQL查询作为时间戳

mysql 到 postgresql 查询转换

ruby-on-rails - 在 ruby​​ 中按年龄范围对用户进行分组

javascript - 5 里后不再显示并放置 `...`

mysql - 双向加密+查找?

MySQL - 函数调用中的引用列