【问题标题】:Self join causing query to run forever自联接导致查询永远运行
【发布时间】:2016-05-03 08:40:28
【问题描述】:

我正在尝试使用自联接来获得累积总和。问题是查询运行超过 2 小时而没有任何结果。我该如何解决这个问题。

Select SUM(A.[GrossWeightKg] - A.[QtyLeftKg])/ 1000 AS DailyUsage
  , SUM(a.[GrossWeightKg] - a.[QtyLeftKg])/ 1000 AS Cumulative   
FROM [PMECentral].[dbo].[FactActualItemUsage] A
    LEFT OUTER JOIN [PMECentral].[dbo].[FactActualItemUsage] ff
        ON a.ActualItemUsageSourceId >= ff.ActualItemUsageSourceId 

【问题讨论】:

  • 在 sql-server 2012 中,您可以使用 SUM(a.[GrossWeightKg] - a.[QtyLeftKg]) OVER(ORDER BY ActualItemUsageSourceId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 之类的东西而无需自连接
  • DailyUsage 和 Cumulative 的表达式完全相同。 - 这是一个错误,不是吗?
  • 您是否缺少 ItemId 或类似内容的附加 JOIN 条件?查询将产生大量输出,并且根据表中的数据量,将运行一段时间。
  • @TimSchmelter 这很神奇,更简单,查询运行速度很快。非常感谢!

标签: sql sql-server-2012 self-join cumulative-sum


【解决方案1】:

在 sql-server 2012 中你可以使用

....
SUM(a.[GrossWeightKg] - a.[QtyLeftKg]) OVER(ORDER BY ActualItemUsageSourceId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
....

没有自我加入。查看OVER-clause ,尤其是带有Rows-clause 的部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2023-03-20
    • 2013-06-09
    相关资源
    最近更新 更多