2017-06-14 124 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 –