编写 SQL 查询来计算卡中的余额

Write a SQL query to calculate the balance in a card

请问如何计算每个季度的余额

数据table

脚本创建 table:

创建 Table 卡片交易 ( CardId varchar(10), Trans_num 整数, 季度 varchar(25), 交易金额浮动, Balance_Trans 浮动 )

插入 CardTransactions 值

('Card1', 1, 'FQ-2013-4', 10 , 5 ),
('Card1', 2, 'FQ-2013-4', 3.65, 1.35 ),
('Card1', 3, 'FQ-2014-1', -10 , 11.35),
('Card1', 4, 'FQ-2014-1', -10, 21.35), ('Card1', 5, 'FQ-2014-1', 4.2, 17.15), ('Card1', 6, 'FQ-2014-3', 2, 15.15), ('Card1', 7, 'FQ-2014-3', 1.15, 14 ),
('Card1', 8, 'FQ-2014-4', -20, 34),
('Card1', 9, 'FQ-2014-4', 5.15, 28.85), ('Card1', 10, 'FQ-2015-3', 4 , 24.85), ('Card1', 11, 'FQ-2015-3', 2.5, 22.35), ('Card1', 12, 'FQ-2015-3', 2.35, 20 )

select * 来自 CardTransactions;

预期结果:需要这样的结果

我试过 运行 这样的查询但没有用

select 
   distinct ct1.CardId, 
   ct1.Quarter,
   ct2.Balance_Trans-ct1.TransactionAmount balance, 
   ROW_NUMBER() over(partition by ct1.Quarter order by ct1.Quarter) rn
from CardTransactions ct1
join  CardTransactions ct2
   on ct1.Trans_num >= ct2.Trans_num;

您似乎想要每张卡片和四分之一的最后 balance_trans

一种方法是:

select ct.*
from (select ct.*,
             row_number() over (partition by cardid, quarter order by trans_num desc) as seqnum
      from CardTransactions ct
     ) ct
where seqnum = 1;

您也可以表示为:

select ct.*
from CardTransactions ct
where ct.trans_num = (select max(ct2.trans_num)
                      from CardTransactions ct2
                      where ct2.cardid = ct.cardid and 
                            ct2.quarter = ct.quarter
                     );