选择MAX时更新其他列的值(updated_date)

jun*_*nky 3 mysql sql postgresql rdbms max

我在用select field1, max(updated_date) from mytable.
我得到正确的值max(updated_date),即最大的日期.
但是field1我只得到第一条记录的值,即"ta1",当我真的想要第三条记录中的"ta3"值(具有最大日期值的那条)时.

例如

+------------+---------------------+
| 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)
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 5

您需要GROUP BY子句或更复杂的查询.

SELECT field1, MAX(updated_date)
  FROM mytable
 GROUP BY field1
Run Code Online (Sandbox Code Playgroud)

对于示例数据,这将返回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;
Run Code Online (Sandbox Code Playgroud)

对于示例数据,这将返回1行:

ta3   2012-03-11 11:05:56
Run Code Online (Sandbox Code Playgroud)

在主要的DBMS中,只有MySQL允许您在select-list中混合使用聚合和非聚合列时省略GROUP BY子句.SQL标准需要GROUP BY子句,您必须列出其中的所有非聚合列.有时,在MySQL中,省略GROUP BY子句会产生您想要的答案; 但是,它经常会给出意想不到的答案.