Как я могу ускорить выборочный запрос с промежуточными итогами? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть исходная таблица с около 45 000 строк. В нем есть какая-то деталь, затем номер недели, а также Qty Planned и Qty Shipped для этой недели и строка подробностей. Сейчас я пытаюсь добавить запущенный qty как для запланированного, так и для отправленного

Я написал запрос, который работает, если я добавляю много предложений WHERE, но если я их удаляю, запрос выполняется очень долго.

SELECT

 s.Season
,s.CustomerCode
,s.Customer
,s.VarietyCode
,s.Variety
,s.GrowingMethodCode
,s.ProductSizeCode
,s.PackType
,s.Market
,s.Brand
,s.WeekNum
,s.Qty_Planned
,(SELECT

  SUM(Qty_Planned)

  FROM  [DataMiningImports].[Apples_Planned_vs_Shipped]
  WHERE WeekNum <= s.WeekNum
  AND   Season = s.Season
  AND   CustomerCode = s.CustomerCode
  AND   VarietyCode = s.VarietyCode
  AND   GrowingMethodCode = s.GrowingMethodCode
  AND   ProductSizeCode = s.ProductSizeCode
  AND   PackType = s.PackType
  AND   Market = S.Market
  AND   Brand = s.Brand
  ) AS Qty_Planned_Running

,s.Qty_Shipped

,(SELECT

  SUM(Qty_Shipped)

  FROM  [DataMiningImports].[Apples_Planned_vs_Shipped]
  WHERE WeekNum <= s.WeekNum
  AND   Season = s.Season
  AND   CustomerCode = s.CustomerCode
  AND   VarietyCode = s.VarietyCode
  AND   GrowingMethodCode = s.GrowingMethodCode
  AND   ProductSizeCode = s.ProductSizeCode
  AND   PackType = s.PackType
  AND   Market = S.Market
  AND   Brand = s.Brand
  ) AS Qty_Shipped_Running

FROM [DataMiningImports].[Apples_Planned_vs_Shipped] AS s

ORDER BY S.WeekNum

1 Ответ

2 голосов
/ 10 мая 2019

Вы делаете суммы в подзапросе, который наиболее вероятно выполняется один раз для каждой строки во внешней таблице.

Вместо этого попробуйте использовать оконную функцию:

SELECT Season, 
       CustomerCode, Customer,
       VarietyCode, Variety,
       GrowingMethodCode, ProductSizeCode, PackType, Market, Brand, 
       WeekNum, Qty_Planned, 
       SUM(Qty_Planned) OVER(PARTITION BY Season, CustomerCode, VarietyCode, GrowingMethodCode, ProductSizeCode, PackType, Market, Brand ORDER BY WeekNum) AS Qty_Planned_Running, 
       SUM(Qty_Shipped) OVER(PARTITION BY Season, CustomerCode, VarietyCode, GrowingMethodCode, ProductSizeCode, PackType, Market, Brand ORDER BY WeekNum) AS Qty_Shipped_Running
FROM [DataMiningImports].[Apples_Planned_vs_Shipped]
ORDER BY WeekNum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...