mysql - 如何对一个字段的 GROUP BY 和 LIMIT N 结果进行分组?

标签 mysql sql yii2

在 MySQL 中我有文章。每篇文章都有类别。我想获取按日期排序的每个类别的最后 N 篇文章。如何在 SQL 中做到这一点?也对如何将其转换为 Yii2 Active Query 感兴趣。

示例:10 篇文章,3 个类别。类别 A 有 2 篇文章,类别 B 有 3 篇文章,类别 C 有 5 篇文章。

像这样的查询

SELECT *
FROM articles
GROUP BY 'category'
LIMIT 2
ORDER BY 'date'

我必须从 A 中获取 2 篇文章,从 B 中获取最后 2 篇文章,从 C 中获取最后 2 篇文章

最佳答案

一种方法是:

select a.*
from articles a
where a.ctime >= coalesce((select a2.ctime
                           from articles a2
                           where a2.category = a.category
                           order by a2.ctime desc
                           limit 1, 1
                          ), a.ctime
                         );

MysQL 不允许 in 带有 limit 的相关子查询。不知道为什么,但它确实适用于比较运算符。

关于mysql - 如何对一个字段的 GROUP BY 和 LIMIT N 结果进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49790326/

相关文章:

php - Yii Framework 2.0 基于角色的访问控制 RBAC

php - Openshift MySQL 5.5 上的 Joomla 3.5.1 内存不足

具有动态列的 MySQL 数据透视表查询

python - 想要使用python编程通过用户命令向MYSQL表中插入数据

MySQL嵌套连接

sql - 在 CakePHP 3 的 COUNT 中使用 DISTINCT

sql - Case 和 When 语句中的问题

mysql - SQL 连接 3 个表,其中一个是可选的

php - 通过 composer 安装 Yii2 失败

php - Yii2:加载 Controller 时如何减少行为()数据库查询?