MySQL每组选择最后3条记录

时间:2018-12-29 09:21:21

标签: mysql sql codeigniter

我有2个表newsnews_category 他们可以加入news.category_id = news_category.id

我想获取所有news_category行,并为每个category id

获得新闻的最后3行

感谢有帮助的文字

2 个答案:

答案 0 :(得分:0)

施瓦茨男爵已经很好地解释了这个问题 LINK

以下基于他的方法。您可以在db-fiddle中自己尝试。 db-fiddle,我创建了一个简化的架构来显示它。

set @num := 0, @category_id := '';

select t.id, t.title
from (
  select category_id, id, title,
        @num := if(@category_id = category_id, @num + 1, 1) as row_number,
        @category_id := category_id as dummy
  from news
  group by category_id, id, title
) t
where t.row_number <= 3

更新

正如下面的戈登·利诺夫(Gordon Linoff)所述,不能保证此答案有效。在引用的博客中也对此做了很好的解释。

答案 1 :(得分:0)

不幸的是,不管参考文献中所说的是什么,都不能保证Jacob的答案有效。问题是MySQL无法保证SCNNode中表达式的求值顺序。因此,您不应在一个表达式中分配变量,然后在另一个表达式中使用它。行为可以改变。

此外,当将变量与ARSCNViewSELECT一起使用时,MySQL的最新版本更加挑剔,因此需要一个附加的子查询。

查询不需要group by。您应该使用order by

group by