嵌套选择 - SQL查询

时间:2017-06-14 06:02:51

标签: mysql sql select

在我的MySQL数据库中,我有一个这样的表

| - 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来获取一年的数据,如下所示:

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这将是一个“交叉产品” - 并且数字不会加起来。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

试试这个

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