转换SQL Server 2008 R2的函数百分比_CONT

转换SQL Server 2008 R2的函数百分比_CONT,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我在测试服务器上创建了一个查询,其中包含SQL 2014。我现在要将它部署到另一台服务器上,不幸的是,另一个实例位于SQL server 2008 R2上。您能否帮助我将PERCENTILE_CONT函数转换为与SQL Server 2008 R2兼容 基本上,我有一个服务器数据库,其中有相应的MBperSec。我想得到所有服务器的上限和下限。百分位数25是上限,百分位数75 Percentile25 = (PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY

我在测试服务器上创建了一个查询,其中包含SQL 2014。我现在要将它部署到另一台服务器上,不幸的是,另一个实例位于SQL server 2008 R2上。您能否帮助我将
PERCENTILE_CONT
函数转换为与SQL Server 2008 R2兼容

基本上,我有一个服务器数据库,其中有相应的MBperSec。我想得到所有服务器的上限和下限。百分位数25是上限,百分位数75

Percentile25 = (PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x.MBperSec) OVER (PARTITION BY x.block, x.operation)),
Percentile75 = (PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY x.MBperSec) OVER (PARTITION BY x.block, x.operation)),

以下是一个合理的近似值——实际上比
percentile\u cont()
更接近于
percentile\u disc()
,但我不知道这是否有区别:

select . . .,
       max(case when seqnum <= cnt * 0.25 then x.MBperSec end) over (partition by x.block, x.operation) as percentile_25,
       max(case when seqnum <= cnt * 0.75 then x.MBperSec end) over (partition by x.block, x.operation) as percentile_75
from (select x.*,
             row_number() over (partition x.block, x.operation
                                order by x.MBperSec
                               ) as seqnum,
             count(*) over (partition x.block, x.operation) as cnt
      from Table_CPU x
      where x.Operation = 'reading' and
            replace(x.block, 'KB', '') in ('64')
     ) x
选择。,

max(当seqnum根据研究百分位盘返回集合/窗口中的值时,而百分位盘将进行插值。我认为百分位盘会给我更精确的输出,但谢谢@Gordon Linoff