我需要根据预定的付款日期和金额计算账龄余额

时间:2019-01-08 23:40:27

标签: mysql sum case

我有一个数据库,其中客户(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     |

0 个答案:

没有答案