一尘不染

当我选择MAX(updated_date)时,其他列的值错误

sql

我正在使用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)

阅读 203

收藏
2021-03-08

共1个答案

一尘不染

您需要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中,当select-list中包含聚合列和非聚合列的混合时,只有MySQL允许您省略GROUP BY子句。SQL标准需要GROUP
BY子句,并且您必须在其中列出所有非聚合列。有时,在MySQL中,省略GROUP BY子句会产生您想要的答案;但是,它设法经常给出一个意想不到的答案。

2021-03-08