我正在尝试做一些我认为相对简单的事情。获取用户最后输入的值。 我有一个表,该表跟踪所有它们的条目,称为plan_activities_logs。我使用此语句来获取有关单个用户的所有活动:
SELECT created_at as last_active, plan_id, plan_value
from plan_activity_logs where plan_id IN (select id from plans where tile_id = 30);
但是当我尝试做这样的事情时:
SELECT MAX(created_at) as last_active, plan_id, plan_value from plan_activity_logs where plan_id IN (select id from plans where tile_id = 30);
当日期和ID正确时,计划值是错误的值。知道我在做什么错吗?
答案 0 :(得分:2)
知道我在做什么错吗?
您没有做错任何事情。根据{{3}}
如果禁用了ONLY_FULL_GROUP_BY,则对标准SQL使用GROUP BY的MySQL扩展允许选择列表HAVING 条件或ORDER BY列表以引用未聚合的列,即使 这些列在功能上不依赖于GROUP BY列。这个 使MySQL接受前面的查询。在这种情况下,服务器 可以从每个组中自由选择任何值,因此除非它们是 相同,选择的值是不确定的,可能不是 你想要什么。
换句话说,此行为符合规范。该查询返回一个随机的不确定性值,因为您对查询组使用了MySql非标准扩展。
答案 1 :(得分:1)
这应该有效
SELECT created_at as last_active, plan_id, plan_value from plan_activity_logs where plan_id IN (select id from plans where tile_id = 30) order by created_at desc limit 1;
答案 2 :(得分:0)
尝试此查询:
select @rn := 1;
select created_at as last_active,
plan_id,
plan_value
from (
select created_at as last_active,
plan_id,
plan_value,
@rn := @rn + 1 rn
from plan_activity_logs
where plan_id IN (select id from plans where tile_id = 30)
order by created_at desc
) a where rn = 1;