sql - 使用唯一标识符将值从一个字段复制到另一个字段
问题描述
我再次迷路了:)我已经搜索过,但找不到对我有用的明确答案,我很想就我的问题获得一些帮助。
我有一个看起来像这样的表:
USERID EVENT CREATED_DATE
223 USER_CREATED 2018-26-10 00:00:00
223 USER_ACTIVATED 2019-01-01 00:00:00
245 USER_CREATED 2018-21-10 00:00:00
245 USER_ACTIVATED 2019-03-01 00:00:00
261 USER_CREATED 2018-22-10 00:00:00
261 USER_ACTIVATED 2019-09-01 00:00:00
257 USER_CREATED 2018-27-10 00:00:00
我想要的是更改 USER_ACTIVATED 事件的日期,我希望它们匹配相关的 USER_CREATED 事件日期,关键是 USERID。
例如,对于 USERID=223,USER_CREATED 日期为“2018-26-10 00:00:00”,因此 USER_ACTIVATED 日期也应为“2018-26-10 00:00:00”。
我需要一个 UPDATE 查询。
几点:
- 每个 USERID 上每种类型只能有 1 个事件,同一个 USERID 上没有重复。
- 我有一个获取所有相关 USERID 的查询,我认为它不是那么相关,但它通常让 al userIds < 0,并且 user_created 的日期是 < SYSDATE-1
- 在我的示例中,用户 ID 是一个接一个,但实际上它并不是一成不变的,它将是 223,然后是 245,然后是 223,然后是不同的事件。
最后一点,UPDATE 的结果应该是:
USERID EVENT CREATED_DATE
223 USER_CREATED 2018-26-10 00:00:00
223 USER_ACTIVATED 2018-26-10 00:00:00
245 USER_CREATED 2018-21-10 00:00:00
245 USER_ACTIVATED 2018-21-10 00:00:00
261 USER_CREATED 2018-22-10 00:00:00
261 USER_ACTIVATED 2018-22-10 00:00:00
257 USER_CREATED 2018-27-10 00:00:00
解决方案
我认为这可以满足您的要求:
update t
set created_date = (select t2.created_date
from t t2
where t2.userId = t.userId and
t2.event = 'USER_CREATED'
)
where event = 'USER_ACTIVATED';
推荐阅读
- typescript - 如何使用 esbuild 将具有多个导出函数的单个 index.ts 文件编译成单独的已编译 javascript 文件
- python - 如何检测键后跟具有特定字符的值并将其从字符串中删除?
- javascript - Jquery - 克隆一个包含输入无序列表的 div。如何让下拉列表在克隆行中工作?
- json - 避免多次编写相同的函数
- flutter - 如何动态地将列添加到 DataTable?
- c++ - 关于C++中继承和虚函数的问题
- python - Matplotlib 无法在子图 2 处正确渲染我的子图 1
- json - Flutter:将json响应传递到下一个屏幕
- node.js - 如何在我的网站上向任何机构发送条纹发票?
- python - 如何垂直打印列表