mysql - SQL 选择 id=max(id) 的行

标签 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

在这个使用我的代码的示例中,当我想要 3 个 rico yellow 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

更新:谢谢大家,

我使用 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

最佳答案

啊啊啊,好老的 ...

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

当然,您应该根据自己的需要进行相应调整。

此外,我认为这是“必读”:SQL Select only rows with Max Value on a Column

关于mysql - SQL 选择 id=max(id) 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7809475/

相关文章:

SQL - 获取条件限制和总计数 - 是否需要子查询?

php - 如何为访问数据库的应用程序分段数据库(也称为多个用户问题的单个数据库)?

php - AngularJS 和 ng-repeat 中令人不舒服的过滤(非英文字符)

python - Django 不级联删除

mysql - sql更改查询中的日期时间

mysql - 将日期从 MM/DD/YYYY 解析为 MYSQL 可以使用的格式

mysql - Doctrine2 条件关系

php - 无法使用php和mysql登录

php - 如何在数据库中插入由 preg_match_all 获得的数组

sql - 你如何在 SQL 中按年份对行的 SUM 进行分组