0

我的目标是获得第 25 个号码。例如,我有 4 行,例如 3、4、5 和 7。我的目标是获得 1.25th(=(4+1) 0.25)。预期结果为 3.25,通过插值 (3+0.25 (4-3)) 获得。

我已经尝试如下。但是还有其他有效的方法吗?

WITH DATASET AS (
SELECT 3 C1 FROM DUAL
UNION 
SELECT 4  FROM DUAL
UNION 
SELECT 5  FROM DUAL
UNION 
SELECT 7  FROM DUAL
)
SELECT 
--RNK, C1, NEXTC1-C1, FIRSTQLOCAION, FIRSTQLOCAION-RNK, C1+(NEXTC1-C1)*(FIRSTQLOCAION-RNK)
C1+(NEXTC1-C1)*(FIRSTQLOCAION-RNK)
FROM( 
SELECT C1, 
LEAD(C1, 1) OVER (ORDER BY C1) as NEXTC1 ,
RANK() OVER (ORDER BY C1) AS RNK,
((SUM(1) OVER (PARTITION BY NULL)) +1) * 0.25 AS FIRSTQLOCAION
FROM DATASET
)
WHERE
FIRSTQLOCAION>=RNK AND FIRSTQLOCAION<=RNK+1;
4

2 回答 2

0

您可以使用如下分析函数:

Select c1, 
       c1 + (
             (((Count(1) over () + 1)*0.25) - 1) * (lead(c1) over (order by c1) - c1)
            ) as calculated_number from
  From your_table t

在此解决方案中,最后一条记录的计算值为 null,因为前导值将为 null,您必须根据您的要求调整其值。

如果您的期望是查询中的单个数字,则使用以下命令:

Select min(c1) + 
       0.25 * (min(case when rn = 2 then c1 end) 
                - min(case when rn = 1 then c1 end)) as calculated_number
from
(Select t.*,
       Row_number() over (order by c1)
  From t)
于 2020-07-05T07:44:57.140 回答
0
WITH t AS (
SELECT 3 C1 FROM DUAL
UNION 
SELECT 4  FROM DUAL
UNION 
SELECT 5  FROM DUAL
UNION 
SELECT 7  FROM DUAL
)
SELECT rn,location, calculated 
FROM ( 
Select rn, c1, 
C1 +(Count(1) over () + 1)*0.25 
-trunc( (Count(1) over () + 1)*0.25 ) *(lead(c1) over (order by c1) - c1) as calculated, --
 trunc( (Count(1) over () + 1)*0.25 ) as location --
 From (Select t.*, Row_number() over (order by c1) rn From t) ) WHERE rn=location;
 
于 2020-07-12T08:23:58.700 回答