根据oracle中的日期执行计算

时间:2014-06-07 16:18:53

标签: sql oracle

我有以下表格。

  • 帐户(ACCOUNT_NUMBER *,平衡)
  • 交易(ACCOUNT_NUMBER *,TRANSACTION_NUMBER *,日期,数量,种类)

日期是交易发生的日期。金额是交易金额 它可以有一个正值或负值,取决于类型(提款 - ,存款+)。我认为这种类型与此无关,因为数量已经以适当的方式给出。 我需要写一个查询,指出至少有一次负余额的账户的account_number。

这里有一些来自Transactions表的样本数据,按account_number和date排序。

account_number  transaction_number      date    amount  type
--------------------------------------------------------------------
1               2                   02/03/2013  -20000  withdrawal
1               3                   03/15/2013  300     deposit
1               1                   01/01/2013  100     deposit
2               1                   04/15/2013  235236  deposit
3               1                   06/15/2013  500     deposit
4               1                   03/01/2013  10      deposit
4               2                   04/01/2013  80      deposit
5               1                   11/11/2013  10000   deposit
5               2                   12/11/2013  20000   deposit
5               3                   12/13/2013  -10002  withdrawal
6               1                   03/15/2013  102300  deposit
7               1                   03/15/2013  100     deposit
8               1                   08/08/2013  133990  deposit
9               1                   05/09/2013  10000   deposit
9               2                   06/01/2013  300     deposit
9               3                   10/11/2013  23      deposit

1 个答案:

答案 0 :(得分:2)

这样的东西带有分析以保持帐户的运行余额:

SELECT DISTINCT account_number
  FROM ( SELECT account_number
           ,SUM(amount)
                      OVER (PARTITION BY account_number ORDER BY date) AS running_balance
       FROM transactions
       ) x
  WHERE running_balance < 0

说明:

它正在使用分析函数:PARTITION BY将表格分成由帐号标识的组。在每个组中,数据按date排序。然后遍历有序组中的每个元素,并应用SUM函数(默认情况下,对从组的开头到当前行的所有内容求和)。这为您提供了运行平衡。只需单独运行内部查询并查看输出,然后阅读有关分析查询的内容。他们很酷。