如何解决编写SQL查询以计算卡中的余额
能帮我计算每个季度的余额吗?
数据表
创建表的脚本:
创建表CardTransactions ( CardId varchar(10), Trans_num int, 四分之一varchar(25), 交易金额浮动 Balance_Trans浮动 )
插入CardTransactions值
('Card1',1,'FQ-2013-4',10,5),
('Card1',2,'FQ-2013-4',3.65,1.35),
(“卡1”,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),
(“卡1”,12,“ FQ-2015-3”,2.35、20)
从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
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。