Joe*_*eky 6 sql-server-2008 sql-server aggregate t-sql azure-sql-database
我有一个存储过程,它计算10 分钟间隔内请求/响应周期的平均持续时间。这很有效,适合我绘制图表的需求。我接下来想做的是计算中值......我怀疑我需要一个子查询,但不知道如何完成这个。
SELECT dateadd(minute, 10 + (datediff(minute, 0, [Started]) / 10) * 10, 0) AS [Time]
,AVG(CASE WHEN Duration is null OR Duration = 0
THEN null ELSE Duration
END) AS [Mean Response Time]
FROM [Application].[Exchange] WITH (NOLOCK)
WHERE [Started] >= '24 Oct 2012' AND [Started] < '25 Oct 2012'
GROUP BY dateadd(minute, 10 + (datediff(minute, 0, [Started]) / 10) * 10, 0)
ORDER BY dateadd(minute, 10 + (datediff(minute, 0, [Started]) / 10) * 10, 0)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我可以实现这一目标的方法吗?
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- replace WITH (nolock)
SELECT [Time]
,AVG(NULLIF(Duration,0)) AS [Mean Response Time]
,AVG(CASE WHEN Rn in (Round(CN/2.0,0),Round((CN+1)/2.0,0))
THEN Duration END) [Median]
FROM
(
SELECT [Time], Duration,
Rn = Row_Number() over (partition by CASE WHEN NullIf(Duration,0) is null then 1 else 2 end,
Time
order by Duration),
Cn = Count(1) over (partition by CASE WHEN NullIf(Duration,0) is null then 1 else 2 end,
Time)
FROM (
SELECT dateadd(minute, 10 + (datediff(minute, 0, [Started]) / 10) * 10, 0) AS [Time],
Duration
FROM [Application].[Exchange]
WHERE [Started] >= '20121024' AND [Started] < '20121025'
) X
) Y
GROUP BY [Time]
ORDER BY [Time];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1847 次 |
最近记录: |