2012-02-10 85 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的確切定義讀了)。