Обновление столбца таблицы 1 на основе отфильтрованной таблицы 2 - PullRequest
0 голосов
/ 10 апреля 2020

Приветствую моих собратьев из мира CoVid. Я застрял с, казалось бы, легкой проблемой, но та, где тратить 4 часа, не дала никаких результатов. У меня есть 2 таблицы - ProductList (PL) и ProductPrice (PP). PL выглядит примерно так

Date          Name       Price
2-Jan-20       A          [ ]
15-Apr-20      A          [ ]
19-Jul-20      A          [ ]

PP выглядит следующим образом

Date          Name        Price
31-Dec-19      A           $10
31-Mar-20      A           $12
30-Apr-20      A           $14

Мне нужно обновить столбец Price в PL из столбца Price в таблице PP. Проблема заключается в следующем. Таблица PP фиксирует изменение цены как и когда это происходит (что происходит с нерегулярными интервалами). Поэтому цена в таблице ProductList будет обновлена ​​путем поиска ближайшей предыдущей даты в таблице ProductPrice. Именно с этим поиском я борюсь.

Принимая вышеприведенный пример к заключению, цена для транзакции 2 января будет равна $ 10 (это будет цена ближайшей даты, предшествующей дате транзакции в таблице ProductPrice). ) тогда как цена транзакции 15 апреля составила бы 12 долларов (поскольку цена 31 марта является ближайшей более ранней датой до транзакции). У меня нет кода, чтобы предложить, так как я даже не смог разобраться с этим - еще меньше приблизиться.

Благодарю каждого из вас за ваше время и интерес к предложению решений и советов.

1 Ответ

0 голосов
/ 10 апреля 2020

Использование APPLY:

select pl.*, pp.date
from pl outer apply
     (select top (1) pp.*
      from pp
      where pp.name = pl.name and pp.date <= pl.date
      order by pp.date desc
     ) pp;

Вы можете легко поместить это в update:

update pl
    set price = pp.price
from pl outer apply
     (select top (1) pp.*
      from pp
      where pp.name = pl.name and pp.date <= pl.date
      order by pp.date desc
     ) pp;
...