我有以下表格。
日期是交易发生的日期。金额是交易金额 它可以有一个正值或负值,取决于类型(提款 - ,存款+)。我认为这种类型与此无关,因为数量已经以适当的方式给出。 我需要写一个查询,指出至少有一次负余额的账户的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
答案 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
函数(默认情况下,对从组的开头到当前行的所有内容求和)。这为您提供了运行平衡。只需单独运行内部查询并查看输出,然后阅读有关分析查询的内容。他们很酷。