mysql - 如何通过组获取最新记录

标签 mysql

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

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

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 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;

关于mysql - 如何通过组获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63488023/

相关文章:

php - MySQL语句好像有错误。我收到 mysqli_num_rows() 和 mysqli_fetch_array() 错误

mysql - 我怎样才能重写我的 MySQL 密码,以便我可以 rake db : create on rails?

mysql - PDO rowCount() 替代方案

mysql - 在 mysql 中为 View 创建注释

php - 添加没有 span 标签或标题的工具提示/气泡显示

sql 使连接的表成为一张表可能是什么?

mysql - 原因 : PreparedStatementCallback; bad SQL grammar

php - 优化查询——急切加载占用太多内存

php - 在保存到数据库之前预测 future 使用的 ID

mysql - ORM:仅当表B中存在id时才从表A中选择