mysql按日期和空值分组

mysql按日期和空值分组,mysql,Mysql,我对mysql有一个问题,因为我想按一些日期和一些空值分组,但结果不是预期的。我的目标是减少表的行数,而不是日期数 起始表如下所示: +------+---------------------+---------------------+---------------------+--+ | Col1 | Date1 | Date2 | Date3 | | +------+-------------------

我对mysql有一个问题,因为我想按一些日期和一些空值分组,但结果不是预期的。我的目标是减少表的行数,而不是日期数

起始表如下所示:

+------+---------------------+---------------------+---------------------+--+
| Col1 |        Date1        |        Date2        |        Date3        |  |
+------+---------------------+---------------------+---------------------+--+
| A    | NULL                | 2016-10-27 16:27:22 | NULL                |  |
| A    | NULL                | NULL                | 2012-10-11 07:07:32 |  |
| B    | NULL                | 2016-01-27 16:27:22 | NULL                |  |
| B    | 2016-10-17 16:07:32 | NULL                | NULL                |  |
| C    | NULL                | 2014-10-17 16:07:32 | 2011-10-17 16:57:32 |  |
+------+---------------------+---------------------+---------------------+--+
我希望将此表按Col1分组,以获得以下输出:

+------+---------------------+---------------------+---------------------+
| Col1 |        Date1        |        Date2        |        Date3        |
+------+---------------------+---------------------+---------------------+
| A    | NULL                | 2016-10-27 16:27:22 | 2012-10-11 07:07:32 |
| B    | 2016-10-17 16:07:32 | 2016-01-27 16:27:22 | NULL                |
| C    | NULL                | 2014-10-17 16:07:32 | 2011-10-17 16:57:32 |
+------+---------------------+---------------------+---------------------+
我尝试了以下查询,但未按预期工作:

SELECT *
FROM table1
GROUP BY Col1

有人能帮我修复查询吗?

分组时,您应该对要选择但不在
分组依据中的所有列应用聚合函数。
这在最新版本的MySQL中不是强制性的,但在绝大多数情况下,这正是您所需要的

此查询应为您提供的示例输入提供所需的输出,但如果输入不同,则可能需要不同的聚合函数

SELECT  Col1, max(Date1), max(Date2), max(Date3)
FROM    table1
GROUP BY Col1

如果两行在Col1中具有相同的值,而在例如Date2中具有不同的日期,那么应该返回哪个日期?@martinnice comment。。。在这种情况下,最好返回“最新日期”。。。例如,返回2017年的日期比返回2015年的日期更好。那么Stefano Zanini的答案似乎非常适合您的用例:-)