伙计们,我有一个按月保存客户收入的表格,例如:
表: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;
非常感谢任何帮助!