我有一个数据库,其中客户(customer_id)有很多销售(doc_id),每个销售都有12个或更少的支付日期,每个日期都有一个金额。
那么我需要知道每个人为每个人组支付的账龄(应付款总额)。
这是数据库:http://www.sqlfiddle.com/#!9/25e083/1
doc_id | customer_id | date_1 | date_2 | .... | date_11 | date_12 | amt_1 | amt_2 .... | amt_11 | amt_12
我有这个Mysql查询:
select
`customer_id` as `customer_id`,
sum(`Balance6`) as `Balance6` ,
sum(`Balance5`) as `Balance5` ,
sum(`Balance4`) as `Balance4` ,
sum(`Balance3`) as `Balance3` ,
sum(`Balance2`) as `Balance2` ,
sum(`Balance1`) as `Balance1` ,
sum(`Balance0`) as `Balance0` ,
sum(`Balance-1`) as `Balance-1` ,
sum(`Balance-2`) as `Balance-2` ,
sum(`Balance-3`) as `Balance-3` ,
sum(`Balance-4`) as `Balance-4` ,
sum(`Balance-5`) as `Balance-5` ,
sum(`Balance-6`) as `Balance-6` ,
sum(`Balance-7`) as `Balance-7` ,
sum(`Balance-8`) as `Balance-8` ,
sum(`Balance-9`) as `Balance-9` ,
sum(`Balance-10`) as `Balance-10` ,
sum(`Balance-11`) as `Balance-11` ,
sum(`Balance-12`) as `Balance-12` ,
sum(`Balance-13`) as `Balance-13`
from (
select
`cartera_listado_test`.`customer_id`,
case
when `cartera_listado_test`.`date_1` <= '2019-08-09' and `cartera_listado_test`.`date_1` > '2019-07-09' then `cartera_listado_test`.`amt_1`
when `cartera_listado_test`.`date_2` <= '2019-08-09' and `cartera_listado_test`.`date_2` > '2019-07-09' then `cartera_listado_test`.`amt_2`
when `cartera_listado_test`.`date_3` <= '2019-08-09' and `cartera_listado_test`.`date_3` > '2019-07-09' then `cartera_listado_test`.`amt_3`
when `cartera_listado_test`.`date_4` <= '2019-08-09' and `cartera_listado_test`.`date_4` > '2019-07-09' then `cartera_listado_test`.`amt_4`
when `cartera_listado_test`.`date_5` <= '2019-08-09' and `cartera_listado_test`.`date_5` > '2019-07-09' then `cartera_listado_test`.`amt_5`
when `cartera_listado_test`.`date_6` <= '2019-08-09' and `cartera_listado_test`.`date_6` > '2019-07-09' then `cartera_listado_test`.`amt_6`
when `cartera_listado_test`.`date_7` <= '2019-08-09' and `cartera_listado_test`.`date_7` > '2019-07-09' then `cartera_listado_test`.`amt_7`
when `cartera_listado_test`.`date_8` <= '2019-08-09' and `cartera_listado_test`.`date_8` > '2019-07-09' then `cartera_listado_test`.`amt_8`
when `cartera_listado_test`.`date_9` <= '2019-08-09' and `cartera_listado_test`.`date_9` > '2019-07-09' then `cartera_listado_test`.`amt_9`
when `cartera_listado_test`.`date_10` <= '2019-08-09' and `cartera_listado_test`.`date_10` > '2019-07-09' then `cartera_listado_test`.`amt_10`
when `cartera_listado_test`.`date_11` <= '2019-08-09' and `cartera_listado_test`.`date_11` > '2019-07-09' then `cartera_listado_test`.`amt_11`
when `cartera_listado_test`.`date_12` <= '2019-08-09' and `cartera_listado_test`.`date_12` > '2019-07-09' then `cartera_listado_test`.`amt_12`
else 0
end as `Balance6` ,
case
when `cartera_listado_test`.`date_1` <= '2019-07-09' and `cartera_listado_test`.`date_1` > '2019-06-09' then `cartera_listado_test`.`amt_1`
when `cartera_listado_test`.`date_2` <= '2019-07-09' and `cartera_listado_test`.`date_2` > '2019-06-09' then `cartera_listado_test`.`amt_2`
when `cartera_listado_test`.`date_3` <= '2019-07-09' and `cartera_listado_test`.`date_3` > '2019-06-09' then `cartera_listado_test`.`amt_3`
when `cartera_listado_test`.`date_4` <= '2019-07-09' and `cartera_listado_test`.`date_4` > '2019-06-09' then `cartera_listado_test`.`amt_4`
when `cartera_listado_test`.`date_5` <= '2019-07-09' and `cartera_listado_test`.`date_5` > '2019-06-09' then `cartera_listado_test`.`amt_5`
when `cartera_listado_test`.`date_6` <= '2019-07-09' and `cartera_listado_test`.`date_6` > '2019-06-09' then `cartera_listado_test`.`amt_6`
when `cartera_listado_test`.`date_7` <= '2019-07-09' and `cartera_listado_test`.`date_7` > '2019-06-09' then `cartera_listado_test`.`amt_7`
when `cartera_listado_test`.`date_8` <= '2019-07-09' and `cartera_listado_test`.`date_8` > '2019-06-09' then `cartera_listado_test`.`amt_8`
when `cartera_listado_test`.`date_9` <= '2019-07-09' and `cartera_listado_test`.`date_9` > '2019-06-09' then `cartera_listado_test`.`amt_9`
when `cartera_listado_test`.`date_10` <= '2019-07-09' and `cartera_listado_test`.`date_10` > '2019-06-09' then `cartera_listado_test`.`amt_10`
when `cartera_listado_test`.`date_11` <= '2019-07-09' and `cartera_listado_test`.`date_11` > '2019-06-09' then `cartera_listado_test`.`amt_11`
when `cartera_listado_test`.`date_12` <= '2019-07-09' and `cartera_listado_test`.`date_12` > '2019-06-09' then `cartera_listado_test`.`amt_12`
else 0
end as `Balance5` ,
case
when `cartera_listado_test`.`date_1` <= '2019-06-09' and `cartera_listado_test`.`date_1` > '2019-05-09' then `cartera_listado_test`.`amt_1`
when `cartera_listado_test`.`date_2` <= '2019-06-09' and `cartera_listado_test`.`date_2` > '2019-05-09' then `cartera_listado_test`.`amt_2`
when `cartera_listado_test`.`date_3` <= '2019-06-09' and `cartera_listado_test`.`date_3` > '2019-05-09' then `cartera_listado_test`.`amt_3`
when `cartera_listado_test`.`date_4` <= '2019-06-09' and `cartera_listado_test`.`date_4` > '2019-05-09' then `cartera_listado_test`.`amt_4`
when `cartera_listado_test`.`date_5` <= '2019-06-09' and `cartera_listado_test`.`date_5` > '2019-05-09' then `cartera_listado_test`.`amt_5`
when `cartera_listado_test`.`date_6` <= '2019-06-09' and `cartera_listado_test`.`date_6` > '2019-05-09' then `cartera_listado_test`.`amt_6`
when `cartera_listado_test`.`date_7` <= '2019-06-09' and `cartera_listado_test`.`date_7` > '2019-05-09' then `cartera_listado_test`.`amt_7`
when `cartera_listado_test`.`date_8` <= '2019-06-09' and `cartera_listado_test`.`date_8` > '2019-05-09' then `cartera_listado_test`.`amt_8`
when `cartera_listado_test`.`date_9` <= '2019-06-09' and `cartera_listado_test`.`date_9` > '2019-05-09' then `cartera_listado_test`.`amt_9`
when `cartera_listado_test`.`date_10` <= '2019-06-09' and `cartera_listado_test`.`date_10` > '2019-05-09' then `cartera_listado_test`.`amt_10`
when `cartera_listado_test`.`date_11` <= '2019-06-09' and `cartera_listado_test`.`date_11` > '2019-05-09' then `cartera_listado_test`.`amt_11`
when `cartera_listado_test`.`date_12` <= '2019-06-09' and `cartera_listado_test`.`date_12` > '2019-05-09' then `cartera_listado_test`.`amt_12`
else 0
end as `Balance4` ,
.....
.....
.....
case
when `cartera_listado_test`.`date_1` <= '2018-02-09' and `cartera_listado_test`.`date_1` > '2018-01-09' then `cartera_listado_test`.`amt_1`
when `cartera_listado_test`.`date_2` <= '2018-02-09' and `cartera_listado_test`.`date_2` > '2018-01-09' then `cartera_listado_test`.`amt_2`
when `cartera_listado_test`.`date_3` <= '2018-02-09' and `cartera_listado_test`.`date_3` > '2018-01-09' then `cartera_listado_test`.`amt_3`
when `cartera_listado_test`.`date_4` <= '2018-02-09' and `cartera_listado_test`.`date_4` > '2018-01-09' then `cartera_listado_test`.`amt_4`
when `cartera_listado_test`.`date_5` <= '2018-02-09' and `cartera_listado_test`.`date_5` > '2018-01-09' then `cartera_listado_test`.`amt_5`
when `cartera_listado_test`.`date_6` <= '2018-02-09' and `cartera_listado_test`.`date_6` > '2018-01-09' then `cartera_listado_test`.`amt_6`
when `cartera_listado_test`.`date_7` <= '2018-02-09' and `cartera_listado_test`.`date_7` > '2018-01-09' then `cartera_listado_test`.`amt_7`
when `cartera_listado_test`.`date_8` <= '2018-02-09' and `cartera_listado_test`.`date_8` > '2018-01-09' then `cartera_listado_test`.`amt_8`
when `cartera_listado_test`.`date_9` <= '2018-02-09' and `cartera_listado_test`.`date_9` > '2018-01-09' then `cartera_listado_test`.`amt_9`
when `cartera_listado_test`.`date_10` <= '2018-02-09' and `cartera_listado_test`.`date_10` > '2018-01-09' then `cartera_listado_test`.`amt_10`
when `cartera_listado_test`.`date_11` <= '2018-02-09' and `cartera_listado_test`.`date_11` > '2018-01-09' then `cartera_listado_test`.`amt_11`
when `cartera_listado_test`.`date_12` <= '2018-02-09' and `cartera_listado_test`.`date_12` > '2018-01-09' then `cartera_listado_test`.`amt_12`
else 0
end as `Balance-12` ,
case
when `cartera_listado_test`.`date_1` <= '2018-01-09' then `cartera_listado_test`.`amt_1`
when `cartera_listado_test`.`date_2` <= '2018-01-09' then `cartera_listado_test`.`amt_2`
when `cartera_listado_test`.`date_3` <= '2018-01-09' then `cartera_listado_test`.`amt_3`
when `cartera_listado_test`.`date_4` <= '2018-01-09' then `cartera_listado_test`.`amt_4`
when `cartera_listado_test`.`date_5` <= '2018-01-09' then `cartera_listado_test`.`amt_5`
when `cartera_listado_test`.`date_6` <= '2018-01-09' then `cartera_listado_test`.`amt_6`
when `cartera_listado_test`.`date_7` <= '2018-01-09' then `cartera_listado_test`.`amt_7`
when `cartera_listado_test`.`date_8` <= '2018-01-09' then `cartera_listado_test`.`amt_8`
when `cartera_listado_test`.`date_9` <= '2018-01-09' then `cartera_listado_test`.`amt_9`
when `cartera_listado_test`.`date_10` <= '2018-01-09' then `cartera_listado_test`.`amt_10`
when `cartera_listado_test`.`date_11` <= '2018-01-09' then `cartera_listado_test`.`amt_11`
when `cartera_listado_test`.`date_12` <= '2018-01-09' then `cartera_listado_test`.`amt_12`
else 0
end as `Balance-13`
FROM `cartera_listado_test`
) as SomeAlias
GROUP BY `customer_id` ORDER BY `customer_id` ASC;
但是未正确添加最后一个字段(平衡13)。似乎只是放置找到的最后一个值,而不添加旧的付款日期。
例如,在customer_id 384列Balance-13上应为5478,其值为0。
我需要的是一个表,其中包含customer_id和将来的付款日(150、120、90、60、30)和过期付款(0,-30,-60,....,-360)>- 360)
customer_id | bal_p_150 | bal_p_120 | bal_p_90 | bal_p_60 | bal_p_30 | bal_m_0 | bal_m_30 | bal_m_60 | bal_m_90 | bal_m_120 | bal_m_150 | bal_m_180 | bal_m_210 | bal_m_240 | bal_m_270 | bal_m_300 | bal_m_330 | bal_m_360 | bal_m_max |
304 | 0 | 0 | 0 | 1575 | 1575 | 1575 | 1575 | 0 | 228 | 2840 | 2840 | 2840 | 2613 | 0 | 575 | 575 | 575 | 575 | 5478 |
739 | 0 | 0 | 0 | 5700 | 5700 | 5700 | 5700 | 357 | 522 | 522 | 522 | 165 | 0 | 0 | 2125 | 2125 | 2125 | 2125 | 0 |
1387 | 0 | 0 | 0 | 7000 | 7000 | 7000 | 7000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3639 | 1945 | 536 | 536 | 0 |
1724 | 0 | 0 | 0 | 0 | 1175 | 2150 | 2150 | 2150 | 0 | 0 | 0 | 0 | 0 | 0 | 2000 | 2000 | 1741 | 0 | 0 |