Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 嵌套select-SQL查询_Mysql_Sql_Select - Fatal编程技术网

Mysql 嵌套select-SQL查询

Mysql 嵌套select-SQL查询,mysql,sql,select,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 | 因此,我希望有一个日期相

在我的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 col FROM (
SELECT value,date FROM Table 
WHERE date BETWEEN '2016-01-01' AND '2016-12-31'
) tab1

现在我必须添加2017年的数据——但如果我只是从(选择…)表1(选择…)表2(选择…)表2)中编写
,这将是一个“交叉切割”-数字不会相加。

我将创建两个子查询,一个用于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)
试试这个

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

我不太了解按日期分组的
格式('2000-07-10','%m-%d')
部分。它不应该是
按日期分组\u格式(日期,%m-%d')
?这意味着,你可以按天/月分组,然后你可以用它做一些事情-我也可以使用
SUM
而不是
group_CONCAT
我想我是不是理解正确了,一个人只能加入。。。?你在日/月日期加入他们似乎是合乎逻辑的。