Oracle SQL分析查询

Oracle SQL分析查询,第1张

概述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-
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来完成.我想做的方式是 –

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

例如,在这种情况下,(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;
总结

以上是内存溢出为你收集整理的Oracle SQL分析查询全部内容,希望文章能够帮你解决Oracle SQL分析查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存