SQL选择行,其中id = max(id)

use*_*369 8 mysql sql aggregate-functions greatest-n-per-group

我有一个表,其中包含产品信息,其中包含具有相同标题的产品的多个实例,由不同颜色及其ID标识.我需要输出整个行,其中id =按标题分组的最大ID,但我似乎无法做到这一点.这是一个非常简化的表和一些示例数据:

id   title   colour   description

1    rico    red      blah1
2    rico    blue     blah2
3    rico    yellow   blah3
4    katia   black    blah4
5    katia   white    blah5
Run Code Online (Sandbox Code Playgroud)

在我的代码的这个例子中,当我想要3个rico黄色blah3时,我得到1个rico red blah1.

这是我正在使用的代码:

SELECT pd_id, pd_title, pd_description, pd_colour,
       pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product 
WHERE 
  cat_sub_id_1 = '".$cat_sub_id."' 
  AND cat_parent_id='".$cat_parent_id."' 
GROUP BY pd_title 
HAVING MAX(pd_id) 
ORDER BY pd_id DESC
Run Code Online (Sandbox Code Playgroud)

更新:谢谢你们,

我使用alinoz的答案来提出以下代码,它有效:)

SELECT
    pd_id,pd_title,pd_description,pd_colour,pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product 
HERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."'
AND pd_id IN (
    SELECT max(pd_id)
    FROM product
    WHERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."'
    GROUP BY pd_title
    )
GROUP BY pd_title
ORDER BY pd_id DESC
Run Code Online (Sandbox Code Playgroud)

Adr*_*iro 19

Aaahhh,一个好老的 -...

select *
from YourTable yt
inner join(
    select title, max(id) id
    from YourTable
    group by title
) ss on yt.id = ss.id and yt.title = ss.title
Run Code Online (Sandbox Code Playgroud)

当然,您应该根据您的需求进行调整.

此外,我认为这是"必读":SQL仅选择列上具有最大值的行


Sal*_*n A 8

我认为这可能有效(未经测试):

SELECT * FROM that_table WHERE id IN (
SELECT MAX(id) FROM that_table GROUP BY title
) /* AND this = that */
Run Code Online (Sandbox Code Playgroud)


DnD*_*DnD 5

只需一行(在本例中为'id')最大值

SELECT * FROM `your_table` order by id desc limit 1
Run Code Online (Sandbox Code Playgroud)


ali*_*noz 3

尝试使用 pd_id = (select max(pd_id) from ... ) 在 where 中添加一个子句

SELECT pd_id, pd_title, pd_description, pd_colour,
       pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product 
WHERE 
  cat_sub_id_1 = '".$cat_sub_id."' 
  AND cat_parent_id='".$cat_parent_id."' 
  AND pd_id = (select max(pd_id) from product)
GROUP BY pd_title
Run Code Online (Sandbox Code Playgroud)

这个查询不是最优的,但它可以完成这项工作。

  • 行不通。您可以在子查询中选择一个最大 id,它仅适用于一个产品组,这使得 where 子句的其余部分排除除整个表中 ID 最高的产品之外的所有其他产品。 (3认同)