2017-06-14 140 views
1

在我的MySQL數據庫我有這樣嵌套的選擇 - SQL查詢

| - value - | - date - | 
|------------------------| 
| 1   | 01.01.2016 | 
| 2   | 02.01.2016 | 
| 3   | 04.02.2016 | 
| 5   | 01.01.2017 | 
| 1   | 02.01.2017 | 
| 5   | 04.02.2017 | 

作爲結果的表,我想有行具有相同日期的值差異(對於只有一天和一個月)。

所以基本上我想這是結果:

| - value - | - date - | 
|------------------------| 
| 1 - 4  | 01.01  | 
| 2 - 1  | 02.01  | 
| 3 - 5  | 04.02  | 

我怎麼能做到這一點的SQL?我可以使用嵌套查詢來送一年的數據是這樣的:

SELECT col FROM (
SELECT value,date FROM Table 
WHERE date BETWEEN '2016-01-01' AND '2016-12-31' 
) tab1 

現在,我將不得不增加2017年的數據 - 但如果我只是寫FROM (SELECT ...) tab1, (SELECT ...) tab2這將是一個「交叉prodcut」 - 而數字不會加起來。

回答

1

我想創建兩個子查詢,一個2016,一個2017年,然後加入他們的行列:

SELECT CONCAT(v16, ' - ', v17) 
FROM (SELECT value AS v16, date AS d16 
     FROM mytable 
     WHERE YEAR(date) = 2016) a 
JOIN (SELECT value AS v17, date AS d17 
     FROM mytable 
     WHERE YEAR(date) = 2017) b ON MONTH(d16) = MONTH(d17) AND 
             DAY(d16) = DAY(d17) 
+0

所以我的理解對不對,是一個只能加入...?按照日期/月份日期加入他們似乎是合乎邏輯的。 –

1

試試這個

SELECT GROUP_CONCAT(value SEPARATOR '-'),DATE_FORMAT(date,'%m-%d')as date 
FROM table GROUP BY DATE_FORMAT(date,'%m-%d'); 
+0

我不太明白'GROUP BY DATE_FORMAT('2000-07-10','%m-%d')'部分。它不應該是GROUP BY DATE_FORMAT(日期,'%m-%d')'?這意味着,你按日/月分組,然後你可以做這些事情 - 我也可以使用'SUM'而不是'GROUP_CONCAT'我想 –

+0

抱歉,感謝Corection –