sql - 如何使用运行总计加快选择查询?
问题描述
我有一个大约 45,000 行的源表。它有一些详细信息,然后是周数,以及该周的计划数量和发货数量以及详细信息行。我现在正在尝试为计划和发货添加运行数量
我编写了一个查询,如果我添加了很多 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
解决方案
您正在子查询中进行求和,这很可能对外部表中的每一行运行一次。
相反,请尝试使用窗口函数:
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
推荐阅读
- maven-2 - 如何从存储库中删除 Sonatype Nexus OSS(3) 组件?
- julia - Julia RemoteChanel 示例给出 UndefVarError
- javafx - 在 JavaFX 多维数据集上显示标签
- c++ - 如何使用输入法打开某个文件夹中的文件夹[C++]
- reporting-services - SSRS - 如何格式化 SQL 数据以生成时间序列的折线图?
- r - 仅列出目录中位于 R 中的参考 data.frame 中的文件?
- jmeter - 在构建正则表达式时需要帮助
- java - 这个java类型签名是什么意思?
- android-studio - 我想在 android studio 中创建这个漂亮的动画。有人能帮我吗?
- javascript - 视障用户的警报可访问性开发 Javascript