【发布时间】:2019-02-11 21:40:00
【问题描述】:
对于表格结构,该表格包含每个国家/地区的每周产品价格。 我的目标是为每种产品在每个国家/地区的最近一周/年中选择每种产品的最低价格。 下面的查询实现了这个目标,但性能相当缓慢。我想知道是否有更有效的方法来完成相同的任务。
在第一部分中,我选择每个国家/地区的最新价格年份和周数。我包括了 CASE 何时计入新年。 我将其保存在#temptable 中。 然后我根据之前选择的年、周和国家组合选择最低价格。
DECLARE @date DATE SET @date=getdate()
SELECT YearNb, Max(WeekNb) AS WeekNb, ISOCountryCode INTO #TempTable FROM PriceBenchWeekly
WHERE PriceBenchWeekly.YearNb = CASE WHEN DATEPART(ww,@date) = 1 THEN
Year(@date)-1
ELSE
Year(@date)
END
GROUP BY YearNb, ISOCountryCode
SELECT ProdNb,Min(WeeklyPrice) AS MinPrice, MarketPlayerCode, 'MKT' AS PriceOriginTypeCode, NatCoCode
FROM CE.PriceBenchWeekly INNER JOIN #TempTable ON PriceBenchWeekly.YearNb = #TempTable.YearNb AND
PriceBenchWeekly.WeekNb = #TempTable.WeekNb AND PriceBenchWeekly.ISOCountryCode = #TempTable.ISOCountryCode
GROUP BY PriceBenchweekly.YearNb, PriceBenchWeekly.ISOCountryCode, BNCode, MarketPlayerCode
【问题讨论】:
-
我怀疑 case 语句影响了你的表现。打开显示计划运行查询,看看它告诉你什么(粘贴图像)
-
哪一部分有问题?您正在处理多少条记录?
标签: sql sql-server