|
我正着按月计算每个月POLICY_ID平均月保费价值如下所示。当客户将他/她的年付款频率更新为不同于12的值时,我需要手动计算PREMIUM平均月值。如何获得?MONTHLY1 L) o' t( b) k
_PREMIUM_DESIRED中显示的值?提前致谢。
6 a: x% z+ U# x注意:Oracle版本12c/ ]9 C; d2 j9 b! Y ]; D9 \2 {: X
我尝试过的( } @% @. v2 S4 m
SELECT T.*, SUM(PREMIUM) OVER(PARTITION BY T.POLICY_ID ORDER BY T.POLICY_ID,T.PAYMENT_DATE ROWS BETWEEN CURRENT ROW AND 12/T.YEARLY_PAYMENT_FREQ-1 FOLLOWING T.YEARLY_PAYMENT_FREQ) MONTLY_PREMIUM_CALCULATEDFROM MYTABLE T;数据代码:! W, q. X6 [7 K9 {1 d9 W
DROP TABLE MYTABLE;CREATE TABLE MYTABLE (POLICY_ID NUMBER(11),PAYMENT_DATE DATE,PREMIUM NUMBER(5),YEARLY_PAYMENT_FREQ NUMBER(2),MONTHLY_PREMIUM_DESIRED NUMBER(5); INSERT INTO MYTABLE VALUES (1,DATE '2014-10-120、120、120);INSERT INTO MYTABLE VALUES (1,DATE '2014-11-360,4,120);INSERT INTO MYTABLE VALUES (1,DATE '2014-12-01、0、4、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-01-01、0、4、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-02-360,4,120);INSERT INTO MYTABLE VALUES (1,DATE '2015-03-01、0、4、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-04-01、0、4、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-05-720,2,120);INSERT INTO MYTABLE VALUES (1,DATE '2015-06-01、0、2、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-07-01、0、2、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-08-01、0、2、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-09-01、0、2、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-10-01、0、2、120);INSERT INTO MYTABLE VALUES (1,DATE '2015-11-120、120、120);INSERT INTO MYTABLE VALUES (2,DATE '2015-01-60,3,15);INSERT INTO MYTABLE VALUES (2,DATE '2015-02-01,0,3,15;INSERT INTO MYTABLE VALUES (2,DATE '2015-03-01,0,3,15;INSERT INTO MYTABLE VALUES (2,DATE '2015-04-01,0,3,15;INSERT INTO MYTABLE VALUES (2,DATE '2015-05-180,1,15);INSERT INTO MYTABLE VALUES (2,DATE '2015-06-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2015-07-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2015-08-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2015-09-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2015-10-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2015-11-01',0,1,15);INSERT INTO MYTABLE VALUES (2,DATE '2015-12-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2016-01-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2016-02-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2016-03-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2016-04-01、0、1、15);INSERT INTO MYTABLE VALUES (2,DATE '2016-05-15、12、15;INSERT INTO MYTABLE VALUES (2,DATE '2016-06-01',15,12,15);SELECT * FROM MYTABLE;编辑:4 ?* ^0 v! x5 Z1 u$ n
无论付款频率如何,客户都可以更改PREMIUM金额。下面,对POLICY_ID = 1,我加了从5 B- [' j; O, T3 W5 `
从2015/11/01开始的新记录来演示这种情况。在这种情况下,月平均保费从120增加到240。屏幕截图也被删除,以使问题更容易读取。- P/ |( X0 e4 w$ ?7 Q; k
DROP TABLE MYTABLE2;CREATE TABLE MYTABLE2 (POLICY_ID NUMBER(11),PAYMENT_DATE DATE,PREMIUM NUMBER(5),YEARLY_PAYMENT_FREQ NUMBER(2),MONTHLY_PREMIUM_DESIRED NUMBER(5));INSERT INTO MYTABLE2 VALUES (1,DATE '2014-10-120、120、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2014-11-360,4,120);INSERT INTO MYTABLE2 VALUES (1,DATE '2014-12-01、0、4、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-01-01、0、4、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-02-360,4,120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-03-01、0、4、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-04-01、0、4、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-05-720,2,120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-06-01、0、2、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-07-01、0、2、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-08-01、0、2、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-09-01、0、2、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-10-01、0、2、120);INSERT INTO MYTABLE2 VALUES (1,DATE '2015-11-01',240,12,240);INSERT INTO MYTABLE2 VALUES (1,DATE '2016-12-01、240、12、240)--newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-01-01、960、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-02-01、0、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-03-01、0、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-04-01、0、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-05-01、960、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-06-01、0、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-07-01、0、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (1,DATE '2016-08-01、0、4、240); --newly added recordsINSERT INTO MYTABLE2 VALUES (2,DATE '2015-01-60,3,15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-02-01,0,3,15;INSERT INTO MYTABLE2 VALUES (2,DATE '2015-03-01,0,3,15;INSERT INTO MYTABLE2 VALUES (2,DATE '2015-04-01,0,3,15;INSERT INTO MYTABLE2 VALUES (2,DATE '2015-05-180,1,15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-06-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-07-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-08-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-09-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-10-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-11-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2015-12-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2016-01-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2016-02-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2016-03-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2016-04-01、0、1、15);INSERT INTO MYTABLE2 VALUES (2,DATE '2016-05-15、12、15;INSERT INTO MYTABLE2 VALUES (2,DATE '2016-06-15、12、15;SELECT * FROM MYTABLE2. 1 F0 B0 a0 F/ @& |. v4 d
解决方案: |
|