目标 - 使用该用户的第一条记录中的值更新每个用户的所有记录
背景 - 我有一个后期制作数据库(即我无法更改数据的捕获方式),它是12个月内所有用户交互的日志。出于分析目的,我想用该用户在数据库中首次出现的月份(yyyy-mm)标记每一行。新字段(first_use)将来自该用户的第一条记录中的现有字段(月)。
选择数据库中的第一行很容易:
SELECT month,user_email, MIN(month) as first_month
FROM table
GROUP BY user_email
这为我提供了表中每个用户的第一行(第一个事务)。
我的问题是如何编写UPDATE语句。当我尝试这样的事情时:
UPDATE table set first_use = (
SELECT MIN(month) as first_month
FROM table
GROUP BY user_email)
然后所有first_use字段包含相同的日期(表中最早的日期)。如何将更新应用于组中的所有记录,一次一组以及该组的正确月份?
答案 0 :(得分:1)
你需要通过以下方式缩小你的群体:
UPDATE table set first_use = (
SELECT MIN(month) as first_month
FROM table T2
where table.user_email = T2.user_email
)
您不需要在子查询中明确分组。但这是一个缓慢的更新,因为它将为表中的每个元组运行一个子查询。