微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决编写SQL查询以计算卡中的余额

能帮我计算每个季度的余额吗?

数据表

enter image description here

创建表的脚本:

创建表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中选择*;

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

enter image description here

我试图像这样运行此查询,但不起作用

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] 举报,一经查实,本站将立刻删除。