mysql按日期和空值分组
我对mysql有一个问题,因为我想按一些日期和一些空值分组,但结果不是预期的。我的目标是减少表的行数,而不是日期数 起始表如下所示:mysql按日期和空值分组,mysql,Mysql,我对mysql有一个问题,因为我想按一些日期和一些空值分组,但结果不是预期的。我的目标是减少表的行数,而不是日期数 起始表如下所示: +------+---------------------+---------------------+---------------------+--+ | Col1 | Date1 | Date2 | Date3 | | +------+-------------------
+------+---------------------+---------------------+---------------------+--+
| 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的答案似乎非常适合您的用例:-)