加入收藏 | 设为首页 | 会员中心 | 我要投稿 宿州站长网 (https://www.0557zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL分析查询

发布时间:2021-01-25 17:05:46 所属栏目:站长百科 来源:网络整理
导读:SQL select LAST_UPDATED_DATE,ODOMETER from demo;LAST_UPDA ODOMETER--------- ----------05-OCT-18 47174.7708-OCT-1812-OCT-18 50246.3715-OCT-1819-OCT-18 53743.1121-OCT-1822-OCT-1825-OCT-18 58789.228 rows selected. 我需要确定里程表值的空值,

SQL> select LAST_UPDATED_DATE,ODOMETER from demo;

LAST_UPDA   ODOMETER
--------- ----------
05-OCT-18   47174.77
08-OCT-18
12-OCT-18   50246.37
15-OCT-18
19-OCT-18   53743.11
21-OCT-18
22-OCT-18
25-OCT-18   58789.22

8 rows selected.

我需要确定里程表值的空值,这必须使用SQL来完成.我想做的方式是 –

>获取里程表的上一个和下一个非空值以及我可以计算每天平均行驶距离的天数之间的差异.

例如,在这种情况下,(50246.37 – 47174.77)/(12-OCT-18 – 05-OCT-18)= ~439

>现在使用每天的平均值,计算以天为单位的差异,并乘以平均值.

例如,(08-OCT-18-05-OCT-18)= 3天,3天439 * 3 = 1317.因此,08-Oct-18的值可以是47174.77 1317 = 48491.77

现在,我需要帮助为此编写SQL代码.

任何帮助将不胜感激.

解决方法

您可以使用累计最大值和最小值获得上一行和下一行(这假设里程表仅沿一个方向).其余的只是算术插值的算术:

select d.last_updated_date,d.odometer,(case when d.odometer is not null then d.odometer
             else prev_o + (next_o - prev_o) * (last_updated_date - prev_lud) / (next_lud - prev_lud)
        end)
from (select d.*,max(case when odometer is not null then last_updated_date end) over (order by last_updated_date) as prev_lud,max(odometer) over (order by last_updated_date) as prev_o,min(case when odometer is not null then last_updated_date end) over (order by last_updated_date desc) as next_lud,min(odometer) over (order by last_updated_date desc) as next_o
      from demo d
     ) d;

(编辑:宿州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读