2016-12-07 41 views
0

我有一个查询,在该查询中,我总结了一个特定的列。根据以前和现在的销售列创建2排列

我想根据总计的列获得以前的排名和当前的排名。

这里是我的MySQL代码

SELECT m.name as name, 
     m.address as address, 
     ROUND(SUM(l.retailer_price),2) as sales 
from members m 
INNER JOIN loading l 
ON m.member_id = l.member_id 
WHERE l.brand_id = '07275324100582216' 
and microtime between unix_timestamp('2016-08-12 00:00:00') 
and unix_timestamp('2016-08-12 23:59:59') 
GROUP by m.name ORDER BY sales desc 

我需要的结果是这样的

| Prev.Rank | Pres.Rank | Name | Prev.Sales | Pres.Sales | S.Diff | 
------------------------------------------------------------------------ 
|  2  | 1  | Joe | $20.00  | $23.00  | $3.00 | 
------------------------------------------------------------------------ 
|  5  | 2  | Grace | $11.00  | $20.00  | $9.00 | 
------------------------------------------------------------------------ 
|  3  | 3  | Pat | $10.50  | $10.50  | $0.00 | 
------------------------------------------------------------------------ 
|  1  | 4  | May | $50.00  | $10.00  | $40.00 | 
------------------------------------------------------------------------ 
|  4  | 5  | Daisy | $10.75  | $9.00  | $1.75 | 
------------------------------------------------------------------------ 


SELECT `Member`.`member_id`, 
     `Member`.`name`, 
     Sum(CASE 
      WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-06' 
      THEN 
      ROUND(SUM(`Sale`.`retailer_price`),2) 
      ELSE 0 
      end)      AS `Previous Sale`, 
     Sum(CASE 
      WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-07' 
      THEN 
      ROUND(SUM(`Sale`.`retailer_price`),2) 
      ELSE 0 
      end)      AS `Current Sale`, 
     Abs(Sum(CASE 
       WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-06' 
       THEN 
       ROUND(SUM(`Sale`.`retailer_price`),2) 
       ELSE 0 
       end) - Abs(Sum(CASE 
           WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") 
            = 
            '2016-12-07' THEN 
           ROUND(SUM(`Sale`.`retailer_price`),2) 
           ELSE 0 
           end))) AS `Sales Diff` 
FROM `members` `Member` 
     JOIN `loading` `Sale` 
     ON `Sale`.`member_id` = `Member`.`member_id` 
GROUP BY `Member`.`member_id` 
+0

是你每天的排名? – Beginner

+0

是的。日常。它今天和昨天使用。 – Ligthers

+0

是每个员工每日总销售额的排名? – Beginner

回答

0

首先创建一个值的表为一个日期,并添加一个等级,然后创建具有相同的表此前的一个日期,也是一个排名。然后加入他们,只选择你需要的列。

事情是这样的:

SELECT * 
FROM 
    (
    SELECT name, @i := @i + 1 AS rank, sales, microtime 
    FROM `sales` as s 
    JOIN (SELECT @i := 0) r 
    WHERE microtime = unix_timestamp('2016-08-12 00:00:00') 
    ORDER BY sales DESC 
) as s1, 
    (
    SELECT name, @j := @j + 1 AS rank, sales, microtime 
    FROM `sales` as s 
    JOIN (SELECT @j := 0) r 
    WHERE microtime = unix_timestamp('2016-08-11 00:00:00') 
    ORDER BY sales DESC 
) as s2 
WHERE s1.name = s2.name 
0

试试这个queury

SELECT `Member`.`member_id`, 
     `Member`.`name`, 
     Sum(CASE 
      WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-06' 
      THEN 
      `Sale`.`retailer_price` 
      ELSE 0 
      end)      AS `Previous Sale`, 
     Sum(CASE 
      WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-07' 
      THEN 
      `Sale`.`retailer_price` 
      ELSE 0 
      end)      AS `Current Sale`, 
     Abs(Sum(CASE 
       WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-06' 
       THEN 
       `Sale`.`retailer_price` 
       ELSE 0 
       end) - Abs(Sum(CASE 
           WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") 
            = 
            '2016-12-07' THEN 
           `Sale`.`retailer_price` 
           ELSE 0 
           end))) AS `Sales Diff` 
FROM `members` `Member` 
     LEFT JOIN `loading` `Sale` 
       ON `Sale`.`member_id` = `Member`.`member_id` 
GROUP BY `Member`.`member_id` 
ORDER BY Sum(CASE 
       WHEN Date_format(`Sale`.`microtime`, "%Y-%m-%d") = '2016-12-07' 
       THEN 
       `Sale`.`retailer_price` 
       ELSE 0 
       end) DESC 

enter image description here enter image description here

+0

没有工作。抬头。在我的查询中只有2个表。加载和成员。 member_id连接两个表。 IN loading我总结了某个member_id – Ligthers

+0

的所有零售价格,您能否显示结果。 – Beginner

+0

#1146 - 表'xxxxxx.sales'不存在 – Ligthers

相关问题