5

次のクエリがあります。

-- CTE to remove outliers, e.g. remove the fastest and slowest results
;WITH MinMaxCTE AS 
(
  SELECT ServerName, CONVERT(VARCHAR(10), UpdatedOn, 101) AS [Date], Version, 
    MIN(JaguarStartupTime) AS MinStartTime, MAX(JaguarStartupTime) AS MaxStartTime
  FROM dbo.MachineConfiguration (NOLOCK)
  WHERE DomainLogin NOT IN (SELECT DomainLogin FROM dbo.SupportGroup)
  GROUP BY ServerName, CONVERT(VARCHAR(10), UpdatedOn, 101), Version
)

SELECT  AVG(mc.JaguarStartupTime) AS AverageTime
    , COUNT(*) AS NumEntries
    , mc.Version
FROM    #Eligible mc (NOLOCK)
JOIN MinMaxCTE cte ON mc.ServerName = cte.ServerName 
  AND CONVERT(VARCHAR(10), mc.UpdatedOn, 101) = cte.[Date] 
  AND mc.Version = cte.Version 
  AND mc.JaguarStartupTime <> cte.MinStartTime 
  AND mc.JaguarStartupTime <> cte.MaxStartTime
GROUP BY mc.Version
ORDER BY Version DESC, AVG(mc.JaguarStartupTime) ASC

#Eligible temp テーブルの定義は

create table #Eligible (
    Version nvarchar(50), JaguarStartupTime int, 
    ServerName nvarchar(50), UpdatedOn datetime )

コメントアウトする条件または集計に関係なく、常に次のエラーが発生します: Arithmetic overflow error converting expression to data type int.

ここからどこへ行くことができますか?これをさらにデバッグするにはどうすればよいですか?

編集:サンプルデータ

Version JaguarStartupTime    ServerName     UpdatedOn
6.4.6.082      16040         NewOrleansLA   2012-08-08 12:34:12.330
6.5.1.012      40390         BatonRougeLA   2012-08-08 18:33:17.440
6.5.1.012      48379         HonoluluHI     2012-08-09 04:42:50.453
4

1 に答える 1

5

jaguarstartup時間を平均集計のbigintにキャストしてみましたか...

AVG(CAST(mc.JaguarStartupTime AS BIGINT))

これにより、算術オーバーフローが解決されます。

平均平均を計算するには、サーバーが最初にすべてのintを合計できる必要があるため、平均化するデータ型は、返された回答がintの範囲内であっても、それらの値の合計を格納できる必要があります。

于 2012-11-02T18:02:19.407 に答える