当我选择 MAX(updated_date) 时获取其他列的错误值
·
问题:当我选择 MAX(updated_date) 时获取其他列的错误值
我正在使用select field1, max(updated_date) from mytable。
我得到了max(updated_date)的正确值,即最大日期。
但是,对于field1,当我真的想要第三条记录(具有最大日期值的记录)中的“ta3”值时,我只获取第一条记录的值,即“ta1”。
例如
+------------+---------------------+
| field1 | update_date |
+------------+---------------------+
| ta1 | 2012-03-11 11:05:15 |
| ta2 | 2012-03-11 11:05:32 |
| ta3 | 2012-03-11 11:05:56 |
+------------+---------------------+
3 rows in set (0.00 sec)
+------------+---------------------+
| field1 | max(update_date) |
+------------+---------------------+
| ta1 | 2012-03-11 11:05:56 |
+------------+---------------------+
1 row in set (0.00 sec)
解答
您需要一个 GROUP BY 子句或更复杂的查询。
SELECT field1, MAX(updated_date)
FROM mytable
GROUP BY field1
对于示例数据,这将返回 3 行。
更有可能的是,您想要:
SELECT t1.field1, t3.max_date
FROM mytable AS t1
JOIN (SELECT MAX(t2.updated_date) AS max_date
FROM mytable AS t2
) AS t3
ON t1.updated_date = t3.max_date;
对于示例数据,这将返回 1 行:
ta3 2012-03-11 11:05:56
在主要的 DBMS 中,只有 MySQL 允许您在选择列表中混合了聚合列和非聚合列时省略 GROUP BY 子句。 SQL 标准需要 GROUP BY 子句,您必须在其中列出所有非聚合列。有时,在 MySQL 中,省略 GROUP BY 子句会产生你想要的答案;然而,它往往会给出一个意想不到的答案。
更多推荐
所有评论(0)