MySQL选择最大ID的行返回错误的数据

时间:2018-12-27 07:57:03

标签: mysql max row

我有一张桌子,如下:

        tabl1 :
        id      name     created_on
        ----   ------    ----------
        1       red        2016
        2       green      2017
        3       blue       2018

并按以下查询

    select max(id),
           name,
           created_on
    from   tabl1

结果:

    id     name    created_on    
    ---    ----    ----------
    3      red      2016

在这里,我正确获取了最大ID,但name和created_on值不在同一行。我如何返回这样的结果:

    id     name    created_on    
    ---    ----    ----------
    3      blue      2018

2 个答案:

答案 0 :(得分:1)

您应该使用内部连接woth max id检索右行

select * from tabl1 
inner join  (
    select max(id) max_id
    from   tabl1
) t on t.max_id = tabl1.id 

没有适当的group by子句,最新版本的mysql不允许在未声明列名的情况下进行聚集函数的结果,而不是在聚合函数中,在group by子句中,结果是无法预测的版本

答案 1 :(得分:0)

我可能只在这里使用LIMIT

SELECT id, name, created_on
FROM yourTable
ORDER BY id DESC
LIMIT 1;

如果您使用的是MySQL 8或更高版本,那么您将有另一个选择:

SELECT id, name, created_on
FROM
(
    SELECT id, name, created_on, ROW_NUMBER() OVER (ORDER BY id DESC) rn
    FROM yourTable
) t
WHERE rn = 1;