编写 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
);
请问如何计算每个季度的余额
数据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
);