计算年初至今重复
Posted
技术标签:
【中文标题】计算年初至今重复【英文标题】:Calculate year to date duplicate 【发布时间】:2019-05-16 08:49:37 【问题描述】:我正在尝试计算年初至今
我试试这个脚本,它返回的值很好,但是太慢了
select
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization,
SUM(QTY) as Month_Total,
COALESCE(
(
select SUM(s2.QTY)
FROM stg.Fact_DC_AGG s2
where
s2.Sales_Organization = T.Sales_Organization
and s2.[Delivery_Year]=T.[Delivery_Year]
AND s2.Delivery_month<= T.Delivery_month
),0) as YTD_Total
from stg.Fact_DC_AGG T
group by
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization
ORDER BY
Sales_Organization,T.[Delivery_Year],
T.Delivery_month
我对其进行了修改以优化它,但它返回错误值和重复值:
select
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization,
SUM(QTY) as Month_Total,
COALESCE(
(
),0) as YTD_Total
from stg.Fact_DC_AGG T
INNER JOIN stg.Fact_DC_AGG s2
ON
s2.Sales_Organization = T.Sales_Organization
and s2.[Delivery_Year]=T.[Delivery_Year]
AND s2.Delivery_month<= T.Delivery_month
group by
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization
ORDER BY
Sales_Organization,T.[Delivery_Year],
T.Delivery_month
如何优化查询或纠正第二个脚本?
【问题讨论】:
您真的还在使用 SQL Server 2008R2 吗? 2008 和 2008R2 还剩不到 2 个月的支持时间,都不支持 Window Functions 做累计和。三角连接可能会变得非常昂贵,因此如果您在 2012 年以上,则可以通过摆脱它来进行大优化。 通过升级到受支持的 SQL Server 版本并使用 2012 年及以后提供的累积和功能来优化查询。 您的查询会为表中的每一年/每月生成值。一般来说,没有人比较多年数据(或者是几十年?)的 YTD 值。如果你这样做了,那么你预计计算会有点慢。你在这里的真正目标是什么?您是否正在针对狭窄且很少使用的用例优化查询? 2天前问的大致相同的问题没有回应。 【参考方案1】:首先要删除查询的optimize the performance,您必须删除子查询并使用联接而不是子查询,还需要为查询生成实际执行计划并确定所需的missing index。
注意:缺少索引可能会影响您的 SQL Server 性能,从而降低您的 SQL Server 性能,因此请务必查看您的实际查询执行计划并确定正确的索引。
欲了解更多信息,请访问以下链接。
1) SQL Server Basic Performance Tuning Tips and Tricks
2)Create Missing Index From the Actual Execution Plan
【讨论】:
以上是关于计算年初至今重复的主要内容,如果未能解决你的问题,请参考以下文章