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的更多详细信息。