使用唯一标识符将值从一个字段复制到另一个字段

时间:2019-03-06 13:10:28

标签: sql oracle

我又一次迷失了:) 经过搜索,找不到适合我的独特答案,我很乐意为您的问题提供帮助。

我有一个看起来像这样的表:

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,但我认为这并不相关,但通常可以获取所有userIds <0,并且user_created的日期为
  • 在我的示例中,USERID是一个接一个的,但实际上并没有确定,它将分别是223、245、223和另一个事件。

最后,更新的结果应为:

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

2 个答案:

答案 0 :(得分:1)

我认为这可以满足您的要求

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';

答案 1 :(得分:1)

进行此更新的一种方法是通过CTE /子查询语法:

UPDATE (
    SELECT t1.CREATED_DATE AS CD1, t2.CREATED_DATE AS CD2
    FROM yourTable t1
    INNER JOIN yourTable t2
        ON t1.USERID = t2.USERID
    WHERE t1.EVENT = 'USER_CREATED' AND t2.EVENT = 'USER_ACTIVATED'
)
SET CD2 = CD1;