Mysql 根据日期列使用另一列中的值更新sql列
从上一篇文章中,我得到了我需要的帮助,但是规格有了一些变化,我仍然需要一些帮助 我会尽量把自己说清楚的 我有两个表,一个叫做Users,另一个叫做Users\u status 表用户 表2用户的状态 我想制作一个cron来验证表Users的第2列是否是表Users\u状态的最新状态。表Users_status可能会多次重复user_id,user_status会递增,如下所示: 表2用户的状态 我希望通过1个请求,根据表用户状态中当前创建的最新状态更新表用户状态的第二列。我还希望不更新状态与表用户状态相同的行 如何做到这一点? 当我只需要根据最高的MAX user_status值更新第一个表时,我这样做了感谢@Gervs:Mysql 根据日期列使用另一列中的值更新sql列,mysql,Mysql,从上一篇文章中,我得到了我需要的帮助,但是规格有了一些变化,我仍然需要一些帮助 我会尽量把自己说清楚的 我有两个表,一个叫做Users,另一个叫做Users\u status 表用户 表2用户的状态 我想制作一个cron来验证表Users的第2列是否是表Users\u状态的最新状态。表Users_status可能会多次重复user_id,user_status会递增,如下所示: 表2用户的状态 我希望通过1个请求,根据表用户状态中当前创建的最新状态更新表用户状态的第二列。我还希望不更新状态与表用
UPDATE users
JOIN (SELECT
user_id,
MAX(status) status
FROM
users_status
GROUP BY user_id
) st
ON users.id = st.user_id
SET users.status = st.status
WHERE users.status < st.status
如果有人能在这方面给我帮助,我真的很感激,我想这种要求对我来说有点太复杂了:p
谢谢,假设我们只想更新那些包含相同用户id和用户状态的多个条目的记录 请尝试以下内容:
update Users X ,
(select a.user_id,a.user_status from (select user_id,user_status from users_status
group by user_id,user_status having count(*)>1) a
inner join
(select user_id,user_status from
(select user_id,user_status from users_statys
order by status_created_at desc)temp
group by user_id,user_status)b
on
a.user_id = b.user_id and a.user_status = b.user_status) Y ,
set X.status = Y.user_status where X.id = Y.user_id;
请原谅打字错误:
如果您可以在sqlfiddle中添加数据,那么我可以通过查询查看:
UPDATE users
JOIN (SELECT s.user_id,
s.status
FROM
(SELECT
user_id,
MAX(status_created_at) status_created_at
FROM
users_status
GROUP BY user_id) m
JOIN
user_status s USING (user_id, status_created_at)
) c
SET users.status = c.status
WHERE users.id = c.user_id
在日期数据类型上是StasuSuxCudioType吗?你可以考虑使用一个后插入Triger-你是一种病态的SQL制造者,AHAH,它正在工作!你有没有可能在你的回答中详细说明,你是如何得出这个结论的?我很想听听你的键盘上没有回车键吗?@Gery,啊。。对不起,你是对的。。我只是快速编写查询并发布它。。让我把它格式化。谢谢你的建议
UPDATE users
JOIN (SELECT
user_id,
MAX(status) status
FROM
users_status
GROUP BY user_id
) st
ON users.id = st.user_id
SET users.status = st.status
WHERE users.status < st.status
update Users X ,
(select a.user_id,a.user_status from (select user_id,user_status from users_status
group by user_id,user_status having count(*)>1) a
inner join
(select user_id,user_status from
(select user_id,user_status from users_statys
order by status_created_at desc)temp
group by user_id,user_status)b
on
a.user_id = b.user_id and a.user_status = b.user_status) Y ,
set X.status = Y.user_status where X.id = Y.user_id;
UPDATE users
JOIN (SELECT s.user_id,
s.status
FROM
(SELECT
user_id,
MAX(status_created_at) status_created_at
FROM
users_status
GROUP BY user_id) m
JOIN
user_status s USING (user_id, status_created_at)
) c
SET users.status = c.status
WHERE users.id = c.user_id