[英]UPDATE sql column with value from another column based on a date column
在上一篇文章中,我已经获得了需要的帮助,但是规格有所变化,我仍然需要一些帮助。
我会尽力使自己尽可能清楚。
我有两个表,一个叫Users,另一个叫Users_status。
表用户
column 1 : id (pk)
column 2 : status (fk)
表Users_status
column 1 : user_id (fk)
column 2 : user_status (fk)
column 3 : status_created_at
我想做一个cron来验证表Users的列2是否是表Users_status的最新内容。 表Users_status可能有重复的user_id多次,并且user_status递增,如下所示:
表Users_status
user_id : 1
user_status : 1
status_created_at : 14/09/14
user_id : 1
user_status : 2
status_created_at : 15/09/14
user_id : 1
user_status : 3
status_created_at : 16/09/14
user_id : 2
user_status : 1
status_created_at : 14/09/14
user_id : 2
user_status : 2
status_created_at : 15/09/14
user_id : 2
user_status : 1 // see how user_status came back from 2 to 1
status_created_at : 16/09/14 // most recent status for user_id 2, what I want
我想要一个请求,根据表Users_status中存在的最新status_created_at更新表Users(状态)的第二列,我也不想更新已经具有良好状态(与表Users_status相同的状态)的行
如何才能做到这一点? 当我只需要根据最高(MAX())user_status值更新第一个表时,我就这样做了(感谢@Gervs):
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
谢谢,
带有查询:
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
假设我们只想更新那些包含相同user_id和user_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;
错别字:
如果您可以在sqlfiddle中添加数据,那么我可以检查一下
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.