首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Oracle)使用内插获得第25个数字

(Oracle)使用内插获得第25个数字
EN

Stack Overflow用户
提问于 2020-07-05 07:15:11
回答 2查看 55关注 0票数 0

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

我试过如下。但还有其他有效的方法吗?

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-05 07:44:57

您可以使用如下分析功能:

代码语言:javascript
复制
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,您必须根据您的需求调整它的值。

如果您的期望是查询中的单个数字,那么usw如下所示:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2020-07-12 08:23:58

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62737864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档