Привет. Есть таблица по продажам товаров в магазинах, у некоторых записей отсутствует цена.
+---------+-------------+---------+----------+-------+
| year_id | week_number | good_id | owner_id | price |
+---------+-------------+---------+----------+-------+
| 2019 | 6 | 140629 | 2 | 199 |
+---------+-------------+---------+----------+-------+
| 2019 | 8 | 140629 | 2 | NULL |
+---------+-------------+---------+----------+-------+
| 2017 | 40 | 137233 | 9 | 278 |
+---------+-------------+---------+----------+-------+
| 2017 | 35 | 137233 | 9 | NULL |
+---------+-------------+---------+----------+-------+
| 2017 | 37 | 137233 | 9 | NULL |
+---------+-------------+---------+----------+-------+
Хотелось бы заменить пропущенные значения по следующей схеме: установить значение цены таким же, как и у товара с этим артикулом (
good_id) из этого же магазина (
owner_id) но проданным по возможности в ближайшую к пропущенному значению дату, например:
+---------+-------------+---------+----------+-------+
| year_id | week_number | good_id | owner_id | price |
+---------+-------------+---------+----------+-------+
| 2019 | 6 | 140629 | 2 | 199 |
+---------+-------------+---------+----------+-------+
| 2019 | 8 | 140629 | 2 | 199 |
+---------+-------------+---------+----------+-------+
| 2017 | 40 | 137233 | 9 | 278 |
+---------+-------------+---------+----------+-------+
| 2017 | 35 | 137233 | 9 | 278 |
+---------+-------------+---------+----------+-------+
| 2017 | 37 | 137233 | 9 | 278 |
+---------+-------------+---------+----------+-------+
Пока составил что-то такое, но этот запрос содержаит взаимоисключающие условия, поэтому само собой не затрагивает строк
UPDATE dataset
SET price = p.price
FROM dataset AS p
WHERE good_id = p.good_id
AND owner_id = p.owner_id
AND price IS NULL
AND p.price IS NOT NULL;
GO