2013-09-29 91 views
1

我需要的输出是这样的:MySQL的一个月明智的报告

Month -->| Pre_Mnth2 | Pre_Mnth1 | current_Month_ Name 
Product A | 3387 | 87985 | 2338 
Product B | 6386 | 67983 | 6374 
Product C | 3880 | 76988 | 9378 

... 

所有需要的数据是唯一的单表。

列如下:

id | companycode | merchantcode| pdtname | qty | value | invdate | 

任何人可以帮助我用PHP MySQL查询代码?

我当前的代码返回数据,当月仅

SELECT `pdtname`, `qty`, `value`, sum(`qty`), sum(`value`) 
FROM `ist` 
WHERE merchantcode = $q AND companycode = $companycode 
    AND MONTH(invdate) = $currentdate[mon] 
GROUP BY `pdtname` 

这里变量$q$companycode从用户的会议上作出。

+0

你需要每个月在结果一个单独的列? – Nikhil

回答

2

你在找这样的事吗?

SELECT pdtname, 
     SUM(CASE WHEN invdate 
      BETWEEN LAST_DAY(CURDATE()) - INTERVAL 3 MONTH + INTERVAL 1 DAY 
       AND LAST_DAY(CURDATE()) - INTERVAL 2 MONTH THEN qty END) qty_2m, 
     SUM(CASE WHEN invdate 
      BETWEEN LAST_DAY(CURDATE()) - INTERVAL 3 MONTH + INTERVAL 1 DAY 
       AND LAST_DAY(CURDATE()) - INTERVAL 2 MONTH THEN value END) value_2m, 
     SUM(CASE WHEN invdate 
      BETWEEN LAST_DAY(CURDATE()) - INTERVAL 2 MONTH + INTERVAL 1 DAY 
       AND LAST_DAY(CURDATE()) - INTERVAL 1 MONTH THEN qty END) qty_1m, 
     SUM(CASE WHEN invdate 
      BETWEEN LAST_DAY(CURDATE()) - INTERVAL 2 MONTH + INTERVAL 1 DAY 
       AND LAST_DAY(CURDATE()) - INTERVAL 1 MONTH THEN value END) value_1m, 
     SUM(CASE WHEN invdate 
      BETWEEN LAST_DAY(CURDATE()) - INTERVAL 1 MONTH + INTERVAL 1 DAY 
       AND LAST_DAY(CURDATE()) THEN qty END) qty_m, 
     SUM(CASE WHEN invdate 
      BETWEEN LAST_DAY(CURDATE()) - INTERVAL 1 MONTH + INTERVAL 1 DAY 
       AND LAST_DAY(CURDATE()) THEN value END) value_m 
    FROM ist 
WHERE invdate BETWEEN LAST_DAY(CURDATE()) - INTERVAL 3 MONTH + INTERVAL 1 DAY 
        AND LAST_DAY(CURDATE()) 
    AND companycode = 1 
    AND merchantcode = 1 
GROUP BY pdtname 

注:请确保您在invdate有一个索引。

输出:

 
| PDTNAME | QTY_2M | VALUE_2M | QTY_1M | VALUE_1M | QTY_M | VALUE_M | 
|----------|--------|----------|--------|----------|-------|---------| 
| ProductA |  30 |  3000 |  30 |  3000 | 30 | 3000 | 
| ProductB | 100 |  1000 | 100 |  1000 | 100 | 1000 | 
| ProductC | 320 |  3200 | 320 |  3200 | 320 | 3200 | 

这里是SQLFiddle演示

+0

对不起,彼得,我没有看到你的帖子,由于一些个人probs。我完成了这项任务。回复较晚,抱歉。 – Indra