我的表格如下
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
根据以上数据,我想计算每件商品的总销售排名(根据今天和前一天的价格计算。
今天姓名总销售日期前一天时间
肥皂20 2013-09-18 1 2如果今天的项目在昨天没有退出,那么它在前一天的排名应该为空。
答案 0 :(得分:1)
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
答案 1 :(得分:1)
您必须使用子选择,日期间隔,一些变量,案例和一些脑力劳动。 将所有这些混合在一起你会得到这样的东西:
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
我希望这会有所帮助。