4

伙计们,我有一个按月保存客户收入的表格,例如:

表:ClientRevenueMonthly


+-------------+--------------+------------+
| ClientName  |   Revenue    |    Date    |
+-------------+--------------+------------+
| Client A    |  $95,137.68  |  Sep 2019  |
| Client A    |  $67,188.69  |  Oct 2019  |
| Client B    |  $15,741.61  |  Sep 2019  |
| Client B    |  $9,244.99   |  Oct 2019  |
| Client C    |  $22,655.10  |  Sep 2019  |
| Client C    |  $15,804.12  |  Oct 2019  |
| Client D    |  $5,365.97   |   Sep 2019 |
| Client D    |  $13,640.73  |  Oct 2019  |
+-------------+--------------+------------+

这是一个创建示例:

CREATE TABLE ClientRevenueMonthly (ClientName VARCHAR(20), Revenue VARCHAR(20), Date VARCHAR(20));
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client A","$30,920.33","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client A","$37,715.16","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client B","$58,141.81","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client B","$75,464.45","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client D","$112,236.17","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client D","$133,554.62","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client E","$146,969.71","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client E","$148,938.93","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client F","$72,501.19","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client F","$133,978.90","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client G","$4,084.18","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client G","$8,278.86","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client H","$1,089,227.80","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client H","$977,230.18","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client I","$56,930.20","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client I","$57,127.94","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client J","$500,675.06","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client J","$539,022.22","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client K","$10,694.43","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client K","$571,525.17","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client L","$784,721.60","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client L","$4,271.42","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client M","$159,789.69","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client M","$174,269.57","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client N","$3,954.68","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client N","$6,015.94","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client O","$82,038.83","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client O","$96,439.68","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client P","$16,805.11","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client P","$9,521.79","2019-10");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client Q","$3,758.47","2019-09");
INSERT INTO ClientRevenueMonthly (ClientName,Revenue,Date) VALUES("Client Q","$5,068.93","2019-10");

我需要生成一个报告,显示每个月的客户“上升者”和“下降者”,这样那些每个月看到 >=20% 变化(+ 或 -)的客户都像这样由客户表示(对于任何给定月份...这里的示例显示“TotalCurrentRev”代表“Oct”,“TotalPreviousRev”代表“Sep”):


+-------------+----------+-------------------+---------------------+-----------------+
| ClientName  |  Type    |  TotalCurrentRev  |  TotalPreviousRev   |  TotalMoMChange |
+-------------+----------+-------------------+---------------------+-----------------+
| Client A    |  Riser   |  $95,137.68       |  $67,188.69         |  41.60%         |
| Client B    |  Riser   |  $15,741.61       |  $9,244.99          |  70.27%         |
| Client C    |  Faller  |  $15,804.12       |  $22,655.10         |  -43.35%        |
| Client D    |  Faller  |  $5,365.97        |  $13,640.73         |  -60.66%        |
+-------------+----------+-------------------+---------------------+-----------------+


我一直在搞乱加入,但似乎无法做到这一点。这是我所在的位置:

SELECT cr1.clientName as 'Client Name', 
    if(((cr3.revenue / cr2.revenue) * 100) >= 20, 'Riser', 'Faller') as 'Type', 
    cr2.revenue as 'TotalCurrentRev',
    cr3.revenue as 'TotalPreviousRev', 
    ((cr3.revenue / cr2.revenue) * 100) as 'TotalMoMChange'
FROM   ClientRevenueMonthly cr1
JOIN   (
    SELECT clientName, revenue FROM ClientRevenueMonthly GROUP BY clientName
    ) cr2 ON (cr2.clientName = cr1.clientName)
LEFT JOIN  ClientRevenueMonthly cr3 ON 
           (cr3.date = DATE_SUB(cr1.date, INTERVAL -1 MONTH) AND cr3.clientName = cr1.clientName)
WHERE      cr1.date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')
GROUP BY   cr1.clientName, cr1.date
ORDER BY   cr1.clientName, cr1.date;

非常感谢任何帮助!

4

0 回答 0