mysql group by dates和null values

时间:2017-03-15 12:50:19

标签: mysql

我有一个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

有人可以帮我修复查询吗?

1 个答案:

答案 0 :(得分:1)

分组时,应将聚合函数应用于要选择但不在group by中的所有列。 这在MySQL的最新版本中不是强制性的,但在绝大多数情况下,它都是您需要的。

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

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