gpt4 book ai didi

sql - 运行总计 - 日期差异

转载 作者:行者123 更新时间:2023-12-04 14:54:11 26 4
gpt4 key购买 nike

这是表的样子:

create table IncomeTest (SubjectId int, Date_Value date, debit number, credit number);

insert into IncomeTest values (1, '7-SEP-2017', 11000, 0);
insert into IncomeTest values (1, '7-DEC-2017', 6000, 0);
insert into IncomeTest values (1, '9-JAN-2018', 0, 16110);
insert into IncomeTest values (1, '9-JUL-2018', 0, 619.6);
insert into IncomeTest values (1, '23-JUL-2018', 0, 270.4);

commit;

借方代表兑现,贷方代表兑现。插入表后,您将获得以下数据:
SubjectID | Date_value | Debit |  Credit 
1 9/7/2017 11000 0
1 12/7/2017 6000 0
1 1/9/2018 0 16110.0
1 7/9/2018 0 619.6
1 7/23/2018 0 270.4

我的问题是,我必须计算用户何时还清贷款以及他/她延迟支付了多少,这意味着 11000 的第一笔借记已在 1/9/2018 全额支付:在这里我计算日期差异在这两个日期之间,这就是延迟付款的金额,但随后我需要从 2018 年 1 月 9 日的贷方中扣除 11000,然后继续进行下一笔借记,然后计算下一次借记何时全额支付。

我希望最后得到的结果是:
SubjectID | Date_value | Debit | Credit | PaymentLate |
1 9/7/2017 11000 0 124
1 12/7/2017 6000 0 228

因为第一笔借记已于 2018 年 1 月 9 日全额支付,第二笔借记已于 2018 年 7 月 23 日全额支付... PaymentLate是借方 date_value 之间的日期差异以及累计信用额度达到足够金额的日期。

我确实尝试过运行总计和总和,但是当我开始从信用卡中扣除全额付款时,我遇到了问题......换句话说,我没有走多远。

我使用的是 Oracle 11.1.0.7.0 企业版。

最佳答案

以下语句应该可以解决问题:

WITH sum_data AS (SELECT subject_id
, date_value
, debit
, credit
, SUM(debit) over(PARTITION BY subject_id
ORDER BY date_value
ROWS UNBOUNDED PRECEDING) SUM_debit
, SUM(credit) over(PARTITION BY subject_id
ORDER BY date_value
ROWS UNBOUNDED PRECEDING) SUM_credit
FROM IncomeTest )
SELECT d.subject_id
, d.date_value
, d.debit
, d.credit
, GREATEST( (SELECT MIN(date_value)
FROM sum_data d2
WHERE d2.SUM_credit >= d.sum_debit
AND d2.subject_id = d.subject_id) - date_value
,0) PaymentLate
FROM sum_data d
WHERE debit != 0

关于sql - 运行总计 - 日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com