Я использую SQL Anywhere в качестве моей базы данных.Улучшение запроса SQL Anywhere
У меня есть две таблицы SALES DETAIL (POSDETAIL)
и таблица скорректированного инвентаря (AdjustInventory
), а также создание и запрос, чтобы показать результаты продаж и потери/корректировки.
Вывод должен быть, как это
Product SalesQty Value WastageQty Value
------------------------------------------------
продаж Кол-во будет поступать из POSDETAIL
WastageQty
стола и выйдет из AdjustInventory
POSDETAIL
имеет общие 435625 записей и AdjustInventory
имеет 183528 Всего записей.
Я разработал нижеследующий запрос, который дает мне идеальное решение по мере необходимости, но проблема заключается в том, что запрос очень медленный, для отображения любых конкретных данных в любом диапазоне дат требуется почти 10-15 минут.
Этот запрос необходим. Оптимизация и настройка здесь - это запрос.
select
p.OrderDate, p.ProductId, p.SalesQty,
f.WastedQty/p.SalesQty as WastedQty,
p.NetCost, p.EachCost
from
(select
POSDETAIL.PRODNUM as ProductId,
DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd') as OrderDate,
POSDETAIL.NETCOSTEACH as NetCost,POSDETAIL.COSTEACH as EachCost,
SUM(POSDETAIL.QUAN) as SalesQty
from
DBA.POSDETAIL
group by
POSDETAIL.PRODNUM, POSDETAIL.NETCOSTEACH, POSDETAIL.COSTEACH,
DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
) as p (ProductId, OrderDate, NetCost, EachCost, SalesQty)
left outer join
(select
DBA.AdjustInventory.INVENNUM as ProductId,
DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd') as OrderDate,
SUM(AdjustInventory.ADJUSTUNITS) as WastedQty
from
DBA.POSDETAIL
join
DBA.AdjustInventory on DBA.POSDETAIL.PRODNUM = DBA.AdjustInventory.INVENNUM
and DBA.AdjustInventory.AdjustType = 9
and DATEFORMAT(DBA.AdjustInventory.AdjustTime,'yyyy/mm/dd') = DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
group by
DBA.AdjustInventory.INVENNUM, DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
) as f(ProductId, OrderDate, WastedQty) on p.ProductId = f.ProductId and p.OrderDate = f.OrderDate;
Пожалуйста, помогите
Не могли бы вы, пожалуйста, дайте мне пример того, как сделать это в приведенном выше запросе? Я хочу сделать это в запросе и не хочу писать процедуру хранения. – Jim
Спасибо, что помогли, и запрос улучшился, и теперь он составляет около 30 секунд. – Jim