计算今天的排名';使用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给出的查询非常完美,我对其进行了修改,以获得所需的结果