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」は「10 月」を表し、「TotalPreviousRev」は「9 月」を表しています):


+-------------+----------+-------------------+---------------------+-----------------+
| 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%        |
+-------------+----------+-------------------+---------------------+-----------------+


私は Joins をいじっていますが、これを正しく行うことができないようです。これが私がいる場所です:

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