Plsql 使用最近一年的当前日期值更新列
我正在尝试使用当前日期值更新两列。我需要追溯过去一年中每天的起始库存。计算期初存货的计算方法为:Plsql 使用最近一年的当前日期值更新列,plsql,Plsql,我正在尝试使用当前日期值更新两列。我需要追溯过去一年中每天的起始库存。计算期初存货的计算方法为: (当前未结库存+已结库存)-(新收货)=开始库存 计算出的今天的期初库存将用作前一天的未结库存(期末库存),我已经完成了每天的库存和入库盘点 Date Open\u inv Comp\u inv receive beg\u inv 03/20 100 20 30 90 03/19 90 15 20 ?
(当前未结库存+已结库存)-(新收货)=开始库存
计算出的今天的期初库存将用作前一天的未结库存(期末库存),我已经完成了每天的库存和入库盘点
Date Open\u inv Comp\u inv receive beg\u inv
03/20 100 20 30 90
03/19 90 15 20 ?
03/18 ? 25 30 ?
像这样的东西可能会有帮助
SQL> create table t ( d date, o int, c int, r int, b int );
Table created.
SQL> insert into t values ( date '2000-03-20', 100 , 20 , 30 , 90);
1 row created.
SQL> insert into t values ( date '2000-03-19', null , 15 , 20 , null);
1 row created.
SQL> insert into t values ( date '2000-03-18', null , 25 , 30 , null);
1 row created.
SQL>
SQL> select
2 d,
3 case
4 when row_number() over ( order by d desc ) = 1 then o
5 else min(o) over () +tot_c-tot_r
6 end o,
7 c,
8 r
9 from (
10 select t.*,
11 nvl(sum(c) over ( order by d desc rows between unbounded preceding and 1 preceding),c) as tot_c,
12 nvl(sum(r) over ( order by d desc rows between unbounded preceding and 1 preceding ),r) as tot_r
13 from t
14 );
D O C R
--------- ---------- ---------- ----------
20-MAR-00 100 20 30
19-MAR-00 90 15 20
18-MAR-00 85 25 30
3 rows selected.
此外,如果您可以像我一样使用创建表和插入脚本来表达您的问题,那么其他人可以更容易地帮助您。类似的内容可能会有所帮助
SQL> create table t ( d date, o int, c int, r int, b int );
Table created.
SQL> insert into t values ( date '2000-03-20', 100 , 20 , 30 , 90);
1 row created.
SQL> insert into t values ( date '2000-03-19', null , 15 , 20 , null);
1 row created.
SQL> insert into t values ( date '2000-03-18', null , 25 , 30 , null);
1 row created.
SQL>
SQL> select
2 d,
3 case
4 when row_number() over ( order by d desc ) = 1 then o
5 else min(o) over () +tot_c-tot_r
6 end o,
7 c,
8 r
9 from (
10 select t.*,
11 nvl(sum(c) over ( order by d desc rows between unbounded preceding and 1 preceding),c) as tot_c,
12 nvl(sum(r) over ( order by d desc rows between unbounded preceding and 1 preceding ),r) as tot_r
13 from t
14 );
D O C R
--------- ---------- ---------- ----------
20-MAR-00 100 20 30
19-MAR-00 90 15 20
18-MAR-00 85 25 30
3 rows selected.
另外,如果你能像我一样用创建表和插入脚本表达你的问题,它使其他人更容易帮助您。您需要添加有关您正在更新的列以及到目前为止尝试使用的sql的更多详细信息。您需要添加有关您正在更新的列以及到目前为止尝试使用的sql的更多详细信息。