首页 > 解决方案 > 如何获取组的最新记录

问题描述

按类别分组时如何获取最新的产品标题?

例如,假设这是我的产品表:

id | title | catID | timestamp
1  | apple | 1     | 2020-07-13 08:21:47
2  | pear  | 1     | 2020-07-14 08:21:47
3  | kiwi  | 1     | 2020-07-15 08:21:47

我想要一个查询来给我总产品和最后添加的产品。这是一个有点贪婪的查询,并使它变得更加困难,但我认为我可以通过 group by 来做到这一点。如果可能的话,我真的更愿意保留所有一个查询。我担心我需要添加一个子查询。

SELECT
    p.catID
    , COUNT(p.id) as items
    , MAX(p.id) as last_added_id
    , CASE WHEN p.id = MAX(p.id) THEN p.title
FROM products p
    WHERE p.catID = 1
GROUP BY p.catID

问题是,我的标题为空。

标签: mysql

解决方案


我实际上想不出不使用子查询的方法。假设您使用的是 MySQL 8+,我们可以在这里使用窗口函数:

SELECT id, title, catID, timestamp, cnt
FROM
(
    SELECT *, COUNT(*) OVER () AS cnt
    FROM products
    WHERE catID = 1
) t
ORDER BY timestamp DESC
LIMIT 1;

推荐阅读