Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找帐户达到零的日期_Sql_Oracle_Oracle10g - Fatal编程技术网

Sql 查找帐户达到零的日期

Sql 查找帐户达到零的日期,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,感谢您花时间研究我的问题 我正在试图找到一种方法,在帐户达到0时返回日期 样本数据: DATE ACCOUNT AMOUNT 11/01 001 100 11/02 002 50 11/03 001 -100 11/07 001 20 11/15 002 -50 11/20 001 -20 想要的结果: Account ZeroDate 001

感谢您花时间研究我的问题

我正在试图找到一种方法,在帐户达到0时返回日期

样本数据:

DATE      ACCOUNT  AMOUNT
11/01     001        100
11/02     002         50
11/03     001       -100 
11/07     001         20
11/15     002        -50
11/20     001        -20
想要的结果:

Account   ZeroDate
001       11/03
002       11/15
001       11/20
到目前为止,我还没有找到任何有效的方法。你能给我指出正确的方向吗


再次提前感谢

您可以使用分析函数来计算运行平衡

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select date '2011-11-01' dt, 1 account, 100 amt from dual union all
  3    select date '2011-11-02', 2, 50 from dual union all
  4    select date '2011-11-03', 1, -100 from dual union all
  5    select date '2011-11-07', 1, 20 from dual union all
  6    select date '2011-11-15', 2, -50 from dual union all
  7    select date '2011-11-20', 1, -20 from dual
  8  )
  9  select dt,
 10         account,
 11         amt,
 12         sum(amt) over (partition by account order by dt) current_balance
 13*   from x
SQL> /

DT           ACCOUNT        AMT CURRENT_BALANCE
--------- ---------- ---------- ---------------
01-NOV-11          1        100             100
03-NOV-11          1       -100               0
07-NOV-11          1         20              20
20-NOV-11          1        -20               0
02-NOV-11          2         50              50
15-NOV-11          2        -50               0

6 rows selected.
然后使用流动余额查找零日期

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select date '2011-11-01' dt, 1 account, 100 amt from dual union all
  3    select date '2011-11-02', 2, 50 from dual union all
  4    select date '2011-11-03', 1, -100 from dual union all
  5    select date '2011-11-07', 1, 20 from dual union all
  6    select date '2011-11-15', 2, -50 from dual union all
  7    select date '2011-11-20', 1, -20 from dual
  8  )
  9  select account,
 10         dt zero_date
 11    from (
 12      select dt,
 13             account,
 14             amt,
 15             sum(amt) over (partition by account order by dt) current_balance
 16        from x
 17    )
 18*  where current_balance = 0
SQL> /

   ACCOUNT ZERO_DATE
---------- ---------
         1 03-NOV-11
         1 20-NOV-11
         2 15-NOV-11

您可以使用分析函数来计算运行平衡

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select date '2011-11-01' dt, 1 account, 100 amt from dual union all
  3    select date '2011-11-02', 2, 50 from dual union all
  4    select date '2011-11-03', 1, -100 from dual union all
  5    select date '2011-11-07', 1, 20 from dual union all
  6    select date '2011-11-15', 2, -50 from dual union all
  7    select date '2011-11-20', 1, -20 from dual
  8  )
  9  select dt,
 10         account,
 11         amt,
 12         sum(amt) over (partition by account order by dt) current_balance
 13*   from x
SQL> /

DT           ACCOUNT        AMT CURRENT_BALANCE
--------- ---------- ---------- ---------------
01-NOV-11          1        100             100
03-NOV-11          1       -100               0
07-NOV-11          1         20              20
20-NOV-11          1        -20               0
02-NOV-11          2         50              50
15-NOV-11          2        -50               0

6 rows selected.
然后使用流动余额查找零日期

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select date '2011-11-01' dt, 1 account, 100 amt from dual union all
  3    select date '2011-11-02', 2, 50 from dual union all
  4    select date '2011-11-03', 1, -100 from dual union all
  5    select date '2011-11-07', 1, 20 from dual union all
  6    select date '2011-11-15', 2, -50 from dual union all
  7    select date '2011-11-20', 1, -20 from dual
  8  )
  9  select account,
 10         dt zero_date
 11    from (
 12      select dt,
 13             account,
 14             amt,
 15             sum(amt) over (partition by account order by dt) current_balance
 16        from x
 17    )
 18*  where current_balance = 0
SQL> /

   ACCOUNT ZERO_DATE
---------- ---------
         1 03-NOV-11
         1 20-NOV-11
         2 15-NOV-11

考虑过使用触发器吗?当帐户变成负数或正好达到零时?解析函数!具体地说,在内联视图中,使用前面无边界的按帐户顺序按日期行划分的SUMAMOUNT创建一个运行计数。然后,选择SUMAMOUNT为零的行。诸如此类的事。想过使用触发器吗?当帐户变成负数或正好达到零时?解析函数!具体地说,在内联视图中,使用前面无边界的按帐户顺序按日期行划分的SUMAMOUNT创建一个运行计数。然后,选择SUMAMOUNT为零的行。诸如此类的事。