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;
推荐阅读
- r - 通过函数将 URL 传递给 dplyr:mutate 时如何修复“json 文本中的无效字符”
- python - 我的 python 应用程序中的所有线程都显示为“python3”
- powerapps - 灵活高度画廊行下的空间
- firebase - console.debug 未显示在 firebase 函数日志中
- xamarin - 自定义条目 null xamarin
- java - 当 WeakReference 中的对象被垃圾回收时,是否可以运行代码?
- python - 如何在 HTTP 请求中测试用户名和密码?
- python - 为什么 odoo 11 向导没有响应?
- php - 正则表达式将html实体替换回字符
- angular - 错误类型错误:无法读取未定义的属性“用户”