我有每两周(十四)次的日期,我希望根据交易日期和到期日的14个日期和金额进行操作



我的问题是:我有两张表(A和B),如下

deal_no deal_date deal_amnt
501 `20180525` `10`
502 `20180526` `20`
601 `20180528` `30`
602 `20180529` `40`

B

deal_type  maturity_date
501 `20180525`
502 `20180527`
601 `20180530`
602 `20180530`

对于相同的deal_no(deal_type),如果A的deal_date=B的maturity_date,则maturity_date的deal_amnt应相同例如(对于501-->,如果(20180525=20180525),则amnt=10)

对于相同的deal_no(deal_type),如果来自A<来自B的到期日,则到期日的deal_amnt应相同,并且应在deal_date下追加相同的金额
例如(对于502-->,如果(20180526<20180527),则20180527的金额=20,20180526的金额也应=20)

然而,如果我有多个具有相同到期日的deal_date,那么到期日的金额应该是这两个或多个deal_date的总和。例如(对于601-->if(20180528<20180530)和602-->if(2018 0529<2018 0530)则20180528的金额=30,20180529的金额应=((前30)+(当前40))=70,20180530的金额应为70作为未偿)

我有每两周(十四)一次的日期,我希望根据交易日期和到期日的14个日期和金额进行操作

op应该是:

date   `deal_amnt`
20180516 0
20180517 0
20180518 0
20180519 0
20180520 0
20180521 0
20180522 0 
20180523 0
20180524 0
20180525 10
20180526 20
20180527 20
20180528 30
20180529 70
20180530 70

需要帮助我正在使用plsql

这里有一个纯SQL的解决方案,不需要PL

SQL Fiddle

查询1

with dts(n, dt) as (
select 1 n
, date '2018-05-16'
from dual
union all
select n+1
, date '2018-05-16' + n
from dts where n < 15
)
select dt
, sum(deal_amnt)
from a
join b
on a.deal_no = b.deal_type
right join dts
on dts.dt between a.deal_date and b.maturity_date
group by dt

结果

|                   DT | SUM(DEAL_AMNT) |
|----------------------|----------------|
| 2018-05-16T00:00:00Z |         (null) |
| 2018-05-17T00:00:00Z |         (null) |
| 2018-05-18T00:00:00Z |         (null) |
| 2018-05-19T00:00:00Z |         (null) |
| 2018-05-20T00:00:00Z |         (null) |
| 2018-05-21T00:00:00Z |         (null) |
| 2018-05-22T00:00:00Z |         (null) |
| 2018-05-23T00:00:00Z |         (null) |
| 2018-05-24T00:00:00Z |         (null) |
| 2018-05-25T00:00:00Z |             10 |
| 2018-05-26T00:00:00Z |             20 |
| 2018-05-27T00:00:00Z |             20 |
| 2018-05-28T00:00:00Z |             30 |
| 2018-05-29T00:00:00Z |             70 |
| 2018-05-30T00:00:00Z |             70 |

最新更新