2012-02-10 226 views
0

关于开始/结束周的话题不谈,您如何得到一个查询,从同一张表中选择一个数字来比较本周与去年同一周的数字?MySQL去年同一天

每次我尝试时,数字都会因为它正在做一个跨产品类型的东西而被夸大。

喜欢的东西

SELECT 
DATE(t1.`date`) AS 'Date', SUM(t1.`sold`), SUM(t2.`sold`) 
FROM `table` AS t1 
JOIN `table` AS t2 ON WEEK(t1.`date`) = WEEK(t2.`date`) 
WHERE WEEK(t1.`date`) = WEEK(CURDATE()) AND YEAR(t1.`date`) = YEAR(CURDATE()) AND YEAR(t2.`date`) = YEAR(DATE_ADD(NOW(), INTERVAL - 1 YEAR)) 
GROUP BY DATE(t1.`date`) 
+1

您是否将关联表的模式添加到问题中? – 2012-02-10 05:55:10

+0

您是否试图获得(例如)2012年第1周与2011年第1周的总计,其中'sold'可以是每天? – 2012-02-10 06:01:36

+0

您还应该提供当前的示例数据和您期望得到的结果表 – 2012-02-10 06:06:58

回答

2

怎么样以下?

mysql> SELECT * FROM test; 
+------------+------+ 
| date  | sold | 
+------------+------+ 
| 2012-02-10 | 100 | 
| 2012-02-10 | 200 | 
| 2011-02-10 | 50 | 
| 2011-02-10 | 25 | 
+------------+------+ 
4 rows in set (0.00 sec) 

mysql> SELECT 
    ->  CONCAT(WEEK(date), "-", YEAR(date)), SUM(sold) 
    -> FROM 
    ->  test 
    -> WHERE 
    ->  WEEK(`date`) = WEEK(NOW()) 
    ->  AND (YEAR(`date`) = YEAR(NOW()) OR YEAR(`date`) = YEAR(DATE_ADD(NOW(), INTERVAL - 1 YEAR))) 
    -> GROUP BY 
    ->  YEAR(date), WEEK(date); 
+-------------------------------------+-----------+ 
| CONCAT(WEEK(date), "-", YEAR(date)) | SUM(sold) | 
+-------------------------------------+-----------+ 
| 6-2011        |  75 | 
| 6-2012        |  300 | 
+-------------------------------------+-----------+ 
2 rows in set (0.00 sec) 
0

我建议@ MartinJansen的答案 - MySQL的工作好了很多行方面比列明智的,尤其是您只需要一个特定的星期来提取。

不过,如果你想让它列明智的,或者如果你希望它超过一个特定的星期,你可以尝试:

mysql> SELECT * from sales; 
+------------+------+ 
| date  | sold | 
+------------+------+ 
| 2011-01-01 | 1 | 
| 2011-01-02 | 10 | 
| 2011-01-03 | 3 | 
| 2012-01-01 | 10 | 
| 2012-01-02 | 20 | 
+------------+------+ 

SELECT CONCAT('week',WEEK(t.`date`)) as week, 
SUM(IF(YEAR(t.`date`)=YEAR(DATE_ADD(NOW(), INTERVAL - 1 YEAR)),t.sold,0)) as `2011`, 
SUM(IF(YEAR(t2.`date`)=YEAR(NOW()),t2.sold,0)) as `2012` 
FROM sales t 
LEFT JOIN sales t2 
ON t.date = t2.date  --could add WHERE WEEK(t.date)=... to restrict week 
GROUP BY WEEK(t.date) 

+-------+------+------+ 
| week | 2011 | 2012 | 
+-------+------+------+ 
| week0 | 1 | 0 | 
| week1 | 13 | 30 | 
+-------+------+------+ 

(你必须要在周MySQL的确切定义读了)。