我有两个表tableA(S.no. )和tableB(Id,paid_amt,trxn_dt)
tableA tableB
S.no. amount Id paid_amt trxn_dt
1 500 1 200 2015-01-01
2 500 2 300 2015-02-10
3 500 3 500 2015-04-10
4 500 4 1000 2015-10-10 现在我需要一个查询来获得输出,如下所示:
S.no. amount trxn_dt
1 500 2015-02-10
2 500 2015-04-10
3 500 2015-10-10
4 500 2015-10-10我需要比较来自tableB的tableB之和,以匹配每一个tableA量,并根据它得到最大trxn_dt。E (200+300)=500,所以得到最大值(Trxn_dt),即2015-02-10.同样,对于第2条,get max(trxn_dt)为2015-04-10,最后1 000为2015年-10-10,所以get max(trxn_dt)为2015-10-10 s.no。3和4.也就是说,我必须得到trxn_dt的确切支付金额,根据s.no。我可以使用java中的结果集来完成这个任务,但是对于包含大量数据的表来说,这是很费时的,我希望得到任何帮助。谢谢。
发布于 2016-12-27 10:42:30
需求似乎很复杂,但是如果首先计算运行总数,这是一个简单的比较。
查找来自b的第一个running_total,它覆盖了a中的running_total:
WITH
rta AS
( SELECT [S.no], amount,
running_total = SUM(amount) OVER
(ORDER BY [S.no]
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW)
FROM tableA
),
rtb AS
( SELECT trxn_dt, id,
running_total = SUM(paid_amt) OVER
(ORDER BY trxn_dt, id
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW)
FROM tableB
)
SELECT
a.[S.no], a.amount, b.trxn_dt
FROM rta AS a
OUTER APPLY
( SELECT TOP (1) b.trxn_dt
FROM rtb AS b
WHERE a.running_total <= b.running_total
ORDER BY b.running_total, b.trxn_dt, b.id
) AS b ;在rextester.com测试。
https://dba.stackexchange.com/questions/159235
复制相似问题