我使用以下脚本获取特定制造订单的订单历史记录;
select ds.status, ds.catnr, ds.part_no, ds.print_type, ds.nr_discs, ds.qty, ds.ship_date
from
(select 'Open Order' status, gb.catnr, gb.part_no, decode(gb.tec_criteria,'XX','SCREEN','OF','OFFSET','PI','OFFSET','MC','OFFSET') print_type, sp.nrunits nr_discs, sum(gb.or_menge_fd) qty, min(trunc(gb.shd_date)) ship_date
from gps_beweg gb, oes_customer oc, scm_packtyp sp
where gb.part_no = 'A0101628358-VV92-1900'
and gb.uebergabe_oes = '1'
and gb.pwerk_disc = 'W'
and gb.cunr = oc.cunr
and gb.packtyp = sp.packtyp
group by gb.cunr, oc.name, gb.part_no, sp.nrunits, gb.tec_criteria, gb.catnr, gb.prodtyp, gb.packtyp
UNION ALL
select unique 'Shipped Order' status,
null catnr, null part_no, null print_type, null nr_discs,
(select sum(ds1.planqty) from oes_delsegview ds1 where ds.ordnr = ds1.ordnr and ds.catnr = ds1.catnr and ds.prodtyp = ds1.prodtyp and ds.packtyp = ds1.packtyp) qty,
(select trunc(max(ds1.gps_planshpdate)) from oes_delsegview ds1 where ds.ordnr = ds1.ordnr and ds.catnr = ds1.catnr and ds.prodtyp = ds1.prodtyp and ds.packtyp = ds1.packtyp) ship_date
from part_description pd1, oes_delsegview ds
where pd1.part_no =
(select max(gb.part_no)
from gps_beweg gb
where gb.part_no = 'A0101628358-VV92-1900'
and gb.uebergabe_oes = '1'
and gb.pwerk_disc = 'W')
and pd1.catnr = ds.catnr
and pd1.prodtyp = ds.prodtyp
and pd1.packtyp = ds.packtyp
and ds.ord_o_status in ('7','9')
order by status, ship_date desc) ds
where rownum <=5
此脚本的结果如下所示......
我想使用QTY和SHIP_DATE列中的数据来预测下一个数量和日期。我可以使用TREND函数在Excel中执行此操作。有没有办法在SQL中执行此操作?它是否符合REGR_SLOPE功能(我似乎无法理解它的工作方式!?!)。
答案 0 :(得分:1)
如前所述,据我所知,Oracle的SQL没有内置的趋势功能来帮助你。但是,您可以做的是使用分析函数并提出一些算法。
ROW_NUMBER() OVER (ORDER BY ship_date)
为您提供最后一次和当前订单之间的日期。您必须对这些值进行加权,但是,请将它们与MAX(ship_date)
相乘。然后除以得到要添加到select
status, catnr, part_no, print_type, nr_discs, qty, ship_date,
round(qty + sum(qty_diff_weighted) over (order by rn) /
(sum(rn) over (order by rn) - 1)) as trend_qty,
round(ship_date + sum(date_diff_weighted) over (order by rn) /
(sum(rn) over (order by rn) - 1)) as trend_date
from
(
select
status, catnr, part_no, print_type, nr_discs, qty, ship_date,
row_number() over (order by ship_date) *
(qty - lag(qty) over (order by ship_date)) as qty_diff_weighted,
row_number() over (order by ship_date) *
(ship_date - lag(ship_date) over (order by ship_date)) as date_diff_weighted,
row_number() over (order by ship_date) as rn
from (your query)
)
order by ship_date;
的值。
这是相应的查询。有点难以阅读和理解,但在我看来仍然是一个选项。查询将检索您的所有行以及每行的趋势日期和数量。因此,您可以看到在某个时间预测的内容以及真正遵循的货物。最后一行为您提供当前预测。
{{1}}
结果:
STATUS CATNR ... QTY SHIP_DATE TREND_QTY TREND_DATE Shipped Order 500 06.06.2014 Shipped Order 500 17.11.2014 500 30.04.2015 Shipped Order 300 21.09.2015 180 28.05.2016 Shipped Order 300 16.08.2016 233 29.05.2017 Open Order PPD168 300 24.03.2017 257 11.12.2017
这显示了这项技术。当然,你可能会想出一个完全不同的算法,更适合你。