我要在表的用户的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
是否可以在没有子查询的情况下解决问题? 或者我需要使用它? 如何?
考虑到我有一个庞大的数据库,快速查询更好
答案 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