Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算今天的排名';使用mysql查询的s和昨天总数_Mysql - Fatal编程技术网

计算今天的排名';使用mysql查询的s和昨天总数

计算今天的排名';使用mysql查询的s和昨天总数,mysql,Mysql,我有如下表格 name price date soap 10 2013-09-18 soap 10 2013-09-18 pens 8 2013-09-18 deos 7 2013-09-18 book 13 2013-09-17 book 13 2013-09-17 soap 10 2013-09-17 pens 8 2013-09-17 基于以上数据,我想计算每件商品的总销量排名(基

我有如下表格

name  price  date

soap    10    2013-09-18
soap    10    2013-09-18
pens     8    2013-09-18
deos     7    2013-09-18
book    13    2013-09-17
book    13    2013-09-17
soap    10    2013-09-17
pens     8    2013-09-17
基于以上数据,我想计算每件商品的总销量排名(基于今天和前一天的价格,如下所示)

名称todayrank todayrank previousdayrank总销售日期

肥皂剧20 2013-09-18 12
pens 8 2013-09-18 22
deos 7 2013-09-18 3-


如果“今天”项目在昨天不存在,则其在前一天的排名应为空。

您必须使用子选择、日期间隔、一些变量、案例和一些脑力劳动。
SELECT a.name,
       a.todaysales,
       a.date,
       a.rank AS ranktoday,
       b.rank AS rankyesterday
FROM
  (SELECT name, sum(price) AS todaysales, date, @n := @n + 1 AS rank
   FROM TABLE , (SELECT @n := 0) alias
   WHERE date=curdate() group by 1  order by count(*))a
INNER JOIN
  (SELECT name, sum(price) AS todaysales, date, @n := @n + 1 AS rank
   FROM TABLE , (SELECT @n := 0) alias
   WHERE date=curdate() - interval 1 DAY group by 1  order by count(*))b ON a.name=b.name
将所有这些混合在一起,您将得到如下结果:

SELECT today.*,
       CASE 
         WHEN yesterday.yesterdayrank IS NULL THEN '-' 
         ELSE yesterday.yesterdayrank 
       END
FROM (SELECT @i:=@i +1 AS todayrank,
             name,
             SUM(price) AS price
      FROM test,
           (SELECT @i:= 0) AS foo
      WHERE createdate = DATE (NOW()) - INTERVAL 2 DAY
      GROUP BY name
      ORDER BY todayrank) today
  LEFT JOIN (SELECT @j:= @j +1 AS yesterdayrank,
                    name,
                    SUM(price) AS price
             FROM test,
                  (SELECT @j:= 0) AS bar
             WHERE createdate = DATE (NOW()) - INTERVAL 3 DAY
             GROUP BY name
             ORDER BY yesterdayrank) yesterday ON today.name = yesterday.name

我希望这有帮助。

在20篇文章之后,你应该了解代码块。它是一个
{}
按钮。我无法创建表。请告诉我是否有任何帮助,我编辑了您的文章,以便您可以查看。我了解了如何添加表,非常感谢…我们正在启动两个查询以获得所需的结果。首先,我们计算今天的排名,然后在第二个查询中,我们根据排名和ca传递名称l计算他们在上一个日期的排名..这种方法不够好的原因是bcoz的性能问题。这就是为什么我要寻找一个在单个查询中获得所需结果的查询..adrian its giving me#1248-每个派生表都必须有自己的别名。SELECT today.name,today.price,@i:=@i+1 as todaysrank,DaysRank,DaysPrice1,DATE.yesterdaysrank FROM(选择
name
,SUM(
price
)作为测试价格,(选择@i:=0)作为foo,其中date1=DATE(NOW())-间隔2天分组按
name
ORDER BY price desc)今天左加入(选择
name
,@j:=@j+1作为yesterdaysrank,price1 FROM(选择
name
,SUM(
price
)作为测试中的price1,(选择@j:=0)作为date1=DATE(NOW())-INTERVAL 5天组,按
name
ORDER BY price1 desc)g)从昨天到今天。
name
=昨天。
name
u给出的查询非常完美,我对其进行了修改,以获得所需的结果