Mysql 在SQL中,如何通过比较时间属性为每个用户选择一行中的值,但只能选择最新的行?
我有一个表,其中包含属性userid、value和time,表示为用户设置一些值。我想创建一个表,其中包含用户ID和值,但仅限于最新时间。例如,如果同一用户的行在时间40时显示为“绿色”,另一行在时间50时显示为“蓝色”,则查询结果应显示为“蓝色”。这里有一个例子说明了我是如何尝试这样做的,但是用户6仍然说“绿色”,即使属性“蓝色”是后来的事Mysql 在SQL中,如何通过比较时间属性为每个用户选择一行中的值,但只能选择最新的行?,mysql,sql,Mysql,Sql,我有一个表,其中包含属性userid、value和time,表示为用户设置一些值。我想创建一个表,其中包含用户ID和值,但仅限于最新时间。例如,如果同一用户的行在时间40时显示为“绿色”,另一行在时间50时显示为“蓝色”,则查询结果应显示为“蓝色”。这里有一个例子说明了我是如何尝试这样做的,但是用户6仍然说“绿色”,即使属性“蓝色”是后来的事 您应该如何更改此项?您可以通过在子查询中为每个用户ID查找最大(时间),然后连接到该子查询以查找与最新时间相关联的值: SELECT p.* FROM
您应该如何更改此项?您可以通过在子查询中为每个
用户ID
查找最大(时间)
,然后连接到该子查询以查找与最新时间相关联的值
:
SELECT p.*
FROM Persons p
JOIN (SELECT userid
,MAX(time) as latest_time
FROM Persons
GROUP BY userid
) sub
ON p.userid = sub.userid
AND p.time = sub.latest_time
演示:问题是您得到的是max(value)
。按字母顺序绿色
大于蓝色
。如果您将查询更改为min(value)
,则用户6将显示蓝色。这并不能解决你的问题
要解决问题,您需要执行CTE或子选择。像这样的事情:
SELECT Persons.userid, MAX(value) as latest_value,
MAX(time) as latest_time
FROM Persons
JOIN (
select userid, max(time) as latest_time
from Persons
group by userid
) subSelect
ON subSelect.userid = persons.userid and latest_time = time
GROUP BY userid;