Обновление столбца is_latest в таблице красного смещения - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь обновить столбец is_latest в таблице красных смещений, сгруппированной по source и source_primary_key, с помощью следующего оператора обновления, но получаю сообщение об ошибке, что оконные функции недопустимы в операторах обновления.Как лучше всего это сделать?

update my_schema.production_log
set is_latest = 
case when run_start_time = max(run_start_time) over (partition by 
source,   source_primary_key)
then ‘t’ else ‘f’
end

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вам нужно переписать запрос, чтобы он мог присоединиться к производной таблице:

UPDATE u
SET u.is_latest =CASE
                     WHEN u.run_start_time = j.max_time THEN 't'
                     ELSE 'f'
                 END
FROM my_schema.production_log AS u
INNER JOIN (
    SELECT
        source
      , source_primary_key
      , MAX( run_start_time ) max_time
    FROM my_schema.production_log
    GROUP BY
        source
      , source_primary_key
) AS j
    ON u.source = j.source
    AND u.source_primary_key = j.source_primary_key
0 голосов
/ 20 ноября 2018

Redshift поддерживает предложение FROM в операторе update. Попробуйте это:

update my_schema.production_log
    set is_latest = (case when run_start_time = max_run_start_time
                          then 't' else 'f'
                     end)
    from (select source, source_primary_key, max(run_start_time) as max_run_start_time
          from my_schema.production_log
          group by source, source_primary_key
         ) pl2
    where pl2.source = production_log.source and
          pl2.source_primary_key = production_log.source_primary_key;
...