我有一个包含新闻帖子的表,并且希望获得每个类别的最后添加的newspost。
该表包含这些列:获取每个类别中列的最大值的整行
- ID,标题,图片,描述,类别,日期
例如:我有3类20个职位。每个类别日期的最后一篇文章被返回,所以我得到3篇文章。
我有一个包含新闻帖子的表,并且希望获得每个类别的最后添加的newspost。
该表包含这些列:获取每个类别中列的最大值的整行
例如:我有3类20个职位。每个类别日期的最后一篇文章被返回,所以我得到3篇文章。
认为这样做的最小,最可用的解决方案是一个:
SELECT * FROM (
SELECT * FROM table ORDER BY date DESC
) as t
GROUP BY t.category;
的另一种方法将与子查询具有群组...
@eggyal: 由于rdbms的内部排序顺序,这将使用最后插入的max_date ...
SELECT newsposts.* FROM newsposts NATURAL JOIN (
SELECT category, MAX(date) AS date FROM newsposts GROUP BY category
) t
1. group by受传入集在mysql中的顺序的影响... - 在指出之前进行测试运行.. 2.所有列受到组的影响 - 这是组合的目的;你按类别分组,它将使用组中的第一个“子结果”来显示,在这种情况下:最后一个newspost ... 3.我已经测试过了 - 这很简单,但如果你真的想要撞击解决方案,我会添加一个... – TheHe
此行为不能被依赖。正如[手册](http://dev.mysql.com/doc/en/group-by-hidden-columns.html)所说:“*服务器可以自由选择每个组的任何值,因此除非它们是同样,选择的值是不确定的。“” – eggyal
http://stackoverflow.com/questions/7114173/order-by-subquery-for-group-by-to-join-conversion – TheHe