我拿着兩個日期字段之間的平均分鐘數 - 在最近5天xreports - 這工作得很好:尾均值的計算(平均)列
select avg(datediff(minute, findDateTime, reportClosedDateTime)) as avd from xreports
where findDateTime > dateadd(day, -5, getdate())
然而,也有不少離羣歪斜這個平均值,所以我想採用四分位數範圍 - 即失去最高和最低的25%。我發現這個article。
解釋如何做一個真正的列,但我不能得到它的2列之間有區別的AVG()的工作 - 這是最好的,我可以這樣做:
declare @pp float
set @pp = .25
select avg(datediff(minute, findDateTime, reportClosedDateTime)) as avd
from xreports xr
where findDateTime > dateadd(day, -5, getdate())
and
(select count(*) from xReports xr1
where xr1.finddatetime <= xr.finddatetime) >=
(select @pp*count(*) from xReports)
and
(select count(*) from xReports xr2
where xr2.avd >= xr.avd) >=
(select @pp*count(*) from xReports)
但是,「avd」列未被識別。
我該怎麼做?
thx。
無法識別列'avd',因爲您無法在同一查詢級別中引用別名。把它放在子查詢中。無論如何,這個查詢有優化空間,但只是給你一個杆。 –
我不太確定該怎麼做?你會如何建議優化它? – niico