我有一个体重记录表:
id userid weight is_start_weight
3 10 100 Y
5 10 98 N
7 11 120 N
9 11 115 N
每个用户在第一次输入“Y”时都必须有起始体重标志,但有些用户没有,我想设置它。
我可以通过这种方式选择这些用户:
SELECT p.userid
FROM weight_tracker_log p
WHERE NOT EXISTS (
SELECT s.userid
FROM weight_tracker_log s
WHERE p.userid = s.userid AND s.is_start_weight = 'Y'
)
问题是如何将 is_start_weight
标志更新为“Y”?必须更新 id
最低的第一个用户条目。
可能是我的选择错误,也许我应该将每个用户的第一个条目更新为“Y”?
最佳答案
您可以使用如下查询为每个用户设置最低 ID:
update weight_tracker_log wtl join
(select userid, min(id) as minid
from weight_tracker_log
group by userid
) u
on wtl.userid = u.userid and wtl.id = u.minid
set is_start_weight = 'Y'
where wtl.is_start_weight <> 'Y';
编辑:
如果现有用户可以在非最小 ID 上拥有“Y”权重,则:
update weight_tracker_log wtl join
(select userid, min(id) as minid,
max(is_start_weight = 'Y') as has_y
from weight_tracker_log
group by userid
) u
on wtl.userid = u.userid and wtl.id = u.minid and has_y = 0
set is_start_weight = 'Y';
关于mysql - 如果第一个条目的值不存在于任何行中,如何更新它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446721/