скопировать значение из одного поля в другое с уникальным идентификатором - PullRequest
1 голос
/ 06 марта 2019

Я снова в растерянности :) Я искал и не мог найти внятного ответа, который бы сработал для меня, я хотел бы получить помощь по моему вопросу.

У меня естьтаблица, которая выглядит следующим образом:

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».а также.

Мне нужен запрос ОБНОВЛЕНИЯ.

несколько пунктов:

  • на каждом USERID может быть только 1 событие каждого типа, нетдубликаты для одного и того же USERID.
  • У меня есть запрос, который получает все соответствующие USERID, я думаю, что это не так актуально, но обычно для всех идентификаторов пользователя <0, а дата создания пользователя <SYSDATE-1 </li>
  • в моем примере, 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 ]

1 голос
/ 06 марта 2019

Один из способов сделать это обновление - использовать синтаксис 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;
1 голос
/ 06 марта 2019

Я думаю, что это то, что вы хотите:

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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...