使用过去一年的当前日期值更新列

问题描述 投票:0回答:1

我尝试使用当前日期值更新两列。我需要回溯过去一年中每天的初始库存。计算初始库存的计算是: (Current open inv + Completed inv)-(New receipt) = Beginning inv

计算出的今天的开始库存将用作前一天的开放式inv(结束inv),并且我已经完成了每天的inv和收据计数。

Date   Open_inv   Comp_inv   Receipt   beg_inv
03/20   100        20         30        90
03/19    90        15         20        ?
03/18     ?        25         30        ?
plsql
1个回答
2
投票

这样的事情可能会有所帮助

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.

此外,如果您可以像我一样使用create table和insert脚本来表达您的问题,那么其他人可以更轻松地帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.