对SQL来说还是个新手。我的目标是找到最后一个时间戳事件,并更新每个用户的最后一个会话列。我创建了一个查询,该查询能够找到数据库中每个用户的最后一个时间戳。然后我想根据property_user_id更新property_last_session_date
我目前在SQLite3上运行,所有3列都被定义为Varchar(255)
这是我正在尝试运行的代码。
UPDATE tb1
SET
tb1.property_last_session_date = tt1.property_timestamp
FROM tableEvents tb1
JOIN
(SELECT tb2.property_user_id, MAX(tb2.property_timestamp)
FROM tableEvents tb2
GROUP BY tb2.property_user_id) tt1
ON tb1.property_user_id = tt1.property_user_id谢谢你的帮助!
发布于 2014-11-05 05:02:59
UPDATE tb1
SET tb1.property_last_session_date =
(SELECT tt1.property_timestamp
FROM (SELECT tb2.property_user_id, MAX(tb2.property_timestamp) as property_timestamp
FROM tableEvents tb2
GROUP BY tb2.property_user_id) tt1
WHERE tb1.property_user_id = tt1.property_user_id);它被称为相关子查询,您可以在SELECT、UPDATE、DELETE中使用它。
注意,此子查询是针对tb1的每一行执行的。
但是,MySQL应该足够智能,以便只执行一次tt1。
此查询将更新tb1中的所有行。tb1.property_user_id为null (tb1.property_last_session_date将被设置为NULL)的行可能会出现一些问题
UPDATE tb1
SET property_last_session_date =
(SELECT prop_time
FROM (SELECT property_user_id as user_id, MAX(property_timestamp) as prop_time
FROM tableEvents tb2
GROUP BY property_user_id) tt1
WHERE tt1.user_id = property_user_id);https://stackoverflow.com/questions/26744871
复制相似问题