Ситуация выглядит так:
У нас есть продукт «A123», и мы должны помнить о самой низкой цене за него.
Цены на один продукт зависят от случайного количества магазинов, и невозможно определить, когда магазин x отправит нам свою цену за «A123».
Итак, у меня была таблица SQL со столбцами:
product_number
price
shop (from which shop this price comes)
Функция SQL для обновления цены продукта выглядит следующим образом (это псевдокод SQL, синтаксис не имеет значения):
function update_product(in_shop, in_product_number, in_price)
select price, shop into productRow from products where product_number = in_product_number;
if found then
if (productRow.price > in_price) or (productRow.price < in_price and productRow.shop = in_shop) then
update row with new price and new shop
end if;
else
insert new product that we didn't have before
end if;
Условие (productRow.price
В таблице продуктов у нас есть
A123 22.5 amazon
затем снова приходит информация от Amazon:
A123 25 amazon
Благодаря вышеупомянутому условию мы обновляем цену до более высокой, что является правильным поведением.
Но в этой ситуации алгоритм не работает: снова у нас есть строка в таблице продуктов:
A123 22.5 amazon
потом приходит информация от мерлина
A123 23 merlin (we don't update because price is higher)
затем приходит информация от Amazon
A123 35 amazon
и мы обновляем таблицу, и теперь у нас есть:
A123 35 amazon
но это неправильно, потому что ранее у merlin была более низкая цена на этот продукт.
Есть идеи, как избежать этой ситуации?