我有一个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
有人可以帮我修复查询吗?
答案 0 :(得分:1)
分组时,应将聚合函数应用于要选择但不在group by
中的所有列。
这在MySQL的最新版本中不是强制性的,但在绝大多数情况下,它都是您需要的。
此查询应该为您提供的示例输入提供所需的输出,但如果输入不同,您可能需要不同的聚合函数。
SELECT Col1, max(Date1), max(Date2), max(Date3)
FROM table1
GROUP BY Col1