Логика SQL для замены всех старых значений продукта новыми - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно построить логику для замены всех старых названий продуктов новыми именами продуктов в соответствии с их предыдущими версиями.Вот данные и таблица выглядят так.У меня есть три столбца с именем product_name, Intro_date и previous_product_name.

Текущая таблица:

product_name | Intro_date | previous_product_name
-------------------------------------------------

PRO01              6/1/2016 
PRO02              6/15/2016    
PRO03              6/15/2016    PRO02
PRO04              6/15/2016    PRO01
PRO05              8/1/2016
PRO06              9/1/2016     PRO04
PRO07              9/1/2016     PRO05
PRO08              10/15/2016   PRO06
PRO09              10/15/2016   PRO07

Теперь я хочу создать новое имя столбца «product_name_mapping», и значения данных должны быть заполнены, как показано ниже.

Пример: если вы посмотрите на предыдущее название продукта PRO09 - PRO07.И так же, как прежнее имя продукта PRO07 - PRO05… и т. Д.

отображение выглядит так: PRO05> PRO07> PRO09

Теперь я хочу заменить все предыдущие значения названия продукта PRO05, PRO07 новым продуктомзначение имени PRO09.

То же, что и для PRO08: PRO01> PRO04> PRO06> PRO08

Я хочу заменить все предыдущие названия продуктов (PRO01> PRO04> PRO06) на PRO08.

Итак, вот то, что я ищу для конечного результата.

Таблица результатов:

product_name | Intro_date | previous_product_name | product_name_mapping
------------------------------------------------------------------------

*PRO01             6/1/2016                              PRO08
PRO02              6/15/2016                             PRO03
PRO03              6/15/2016    PRO02                    PRO03
PRO04              6/15/2016    PRO01                    PRO08
PRO05              8/1/2016                              PRO09
PRO06              9/1/2016     PRO04                    PRO08
PRO07              9/1/2016     PRO05                    PRO09
PRO08              10/15/2016   PRO06                    PRO08
PRO09              10/15/2016   PRO07                    PRO09

Я пробовал логику сборки, но безуспешно.Мне нужно построить этот SQL в базе данных AWS Redshift.Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 24 октября 2018

Вам понадобится создать функцию, чтобы пройти цикл и получить текущий элемент.Тогда вы можете использовать функцию в вашем запросе.Я использую SQL Server, но, возможно, вы сможете преобразовать его в AWS Redshift.

Функция

CREATE FUNCTION [guest].[get_mapping]( @product_name AS Varchar(256) )
RETURNS Varchar(256)
AS BEGIN 
    while (@@rowcount > 0)
    BEGIN
        select @product_name = product_name from <YourTable> where previous_product_name = @product_name;
    END
    RETURN @product_name; 
END

Оператор выбора:

select *, get_mapping(product_name) as product_name_mapping from <yourtable>
...