2012-08-31 120 views
0

我有一个包含新闻帖子的表,并且希望获得每个类别的最后添加的newspost
该表包含这些列:获取每个类别中列的最大值的整行

  • ID,标题,图片,描述,类别,日期

例如:我有3类20个职位。每个类别日期的最后一篇文章被返回,所以我得到3篇文章。

回答

0

认为这样做的最小,最可用的解决方案是一个:

SELECT * FROM ( 
    SELECT * FROM table ORDER BY date DESC 
) as t 
GROUP BY t.category; 

的另一种方法将与子查询具有群组...

@eggyal: 由于rdbms的内部排序顺序,这将使用最后插入的max_date ...

+0

1. group by受传入集在mysql中的顺序的影响... - 在指出之前进行测试运行.. 2.所有列受到组的影响 - 这是组合的目的;你按类别分组,它将使用组中的第一个“子结果”来显示,在这种情况下:最后一个newspost ... 3.我已经测试过了 - 这很简单,但如果你真的想要撞击解决方案,我会添加一个... – TheHe

+0

此行为不能被依赖。正如[手册](http://dev.mysql.com/doc/en/group-by-hidden-columns.html)所说:“*服务器可以自由选择每个组的任何值,因此除非它们是同样,选择的值是不确定的。“” – eggyal

+0

http://stackoverflow.com/questions/7114173/order-by-subquery-for-group-by-to-join-conversion – TheHe

1

你想要groupwise maximum

SELECT newsposts.* FROM newsposts NATURAL JOIN (
    SELECT category, MAX(date) AS date FROM newsposts GROUP BY category 
) t 
+0

不是实际上将返回正确的结果...... 它会按类别组,但不会选择“标题,图片,描述和ID”为相应的MAX(日)... 它只会变得在组中的正确DATE ... – TheHe

+0

@TheHe:Err,这就是子查询将执行的操作...父查询然后将'newsposts'表与该子查询连接以获得其余列。 – eggyal

+0

哦,是啊!你完全正确... 但是...当同一天和类别有两个newspost时,BOTH将会显示;) – TheHe

相关问题