У меня есть таблица, которая показывает изменения инвентаря для предметов, например:
Item_ID | Date_ID | Change | Inventory
521 | 5/1/2010 | 56 | 56
634 | 5/2/2010 | -12 | 42
521 | 5/12/2010 | 3 | 59
У меня есть таблица LU_Date и таблица LU_Item со всеми предметами (которые могут или не могут присутствовать в таблице инвентаря.)
Мне нужен вывод, который показывает все даты для всех элементов, с Инвентаризацией в этот день, например:
Item_ID | Date_ID | Change | Inventory
521 | 4/30/2010 | 0 | 0
521 | 5/1/2010 | 56 | 56
521 | 5/2/2010 | 0 | 56
521 | 5/3/2010 | 0 | 56
521 | 5/4/2010 | 3 | 59
634 | 4/30/2010 | 0 | 54
634 | 5/1/2010 | 0 | 54
634 | 5/2/2010 | -12 | 42
632 | 4/30/2010 | 0 | 0
Я пытался найти решение, но не могу найти эффективныйзапрос.При использовании решения, такого как это:
SELECT d.Date_ID,
ISNULL(r.Change,0) AS mnmt,
COALESCE(r.Inventory, S.Inventory) AS quantity
FROM dbo.LU_Date d
CROSS JOIN LU_Item i
LEFT JOIN Fact_Inventory_ByDay r ON d.Date_ID=r.Date_ID AND r.Item_ID=i.Item_ID
OUTER APPLY (SELECT TOP(1) Inventory
FROM Fact_Inventory_ByDay b2
WHERE b2.Item_ID=i.Item_ID AND b2.Date_ID < d.Date_ID
ORDER BY b2.Date_ID DESC, b2.Item_ID DESC) AS S
WHERE i.item_ID=@Item
я получаю недопустимое время ожидания (например, 46 секунд для одного элемента).У кого-нибудь есть элегантное решение для меня?
Спасибо!