Цитата:
Сообщение от
chel
В том подходе, который здесь озвучили (вычитание оборотов с даты получения остатков до текущего момента) нужно сначала запросить InventSum - а потом через некоторое (продолжительное) время InventTrans, в который в момент выполнения запроса к InventSum кто-то третий добавляет записи, т.к. InventTrans пока не блокирован. Да если бы он и был блокирован - то добавлять записи никто бы не помешал - все-таки это не тот уровень изоляции.
По поводу повторной шпильки в мой адрес: еще раз говорю - напишите Ваш Корректный Алгоритм, который корректно отработает эту ситуацию. Мне он не очевиден пока.
Остатки на 01 января
PHP код:
ТЫТЫСЫБЕГИН
SELECT [I]ФОРАПДЭЙТ [/I] TOP 100 dbo.INVENTSUM.ITEMID AS ITEMID, SUM(dbo.INVENTSUM.POSTEDQTY) - SUM(dbo.INVENTTRANS.QTY) AS QTY,
dbo.INVENTSUM.INVENTDIMID
FROM dbo.INVENTSUM LEFT OUTER JOIN
dbo.INVENTTRANS ON dbo.INVENTSUM.INVENTDIMID = dbo.INVENTTRANS.INVENTDIMID AND
dbo.INVENTSUM.ITEMID = dbo.INVENTTRANS.ITEMID
WHERE (dbo.INVENTTRANS.DATEPHYSICAL >= CONVERT(DATETIME, '2006-01-01 00:00:00', 102)) AND
((dbo.INVENTTRANS.STATUSRECEIPT = 1) OR
(dbo.INVENTTRANS.STATUSISSUE = 1) OR
(dbo.INVENTTRANS.STATUSRECEIPT = 2) OR
(dbo.INVENTTRANS.STATUSISSUE = 2) OR
(dbo.INVENTTRANS.STATUSRECEIPT = 3) OR
(dbo.INVENTTRANS.STATUSISSUE = 3))
GROUP BY dbo.INVENTSUM.ITEMID, dbo.INVENTSUM.INVENTDIMID
ТЫТЫСЫКОММИТ
Люди, не обращайте внимания на этот код, так делать на реляционной базе не стоит!
Это просты мы с chel пиписьками меряемся..