嘿大家。我相信这是一个'最大的n-per-group'问题,但即使在查看几个关于StackOverflow的问题之后,我不确定如何将其应用于我的情况...MySQL最大 - 每组麻烦
我正在使用MySQL数据库并有一个基本的博客类型的系统中设置了有关计算机应用......这些表是这样的:
POSTS
post_id
post_created
post_type -- could be article, review, feature, whatever
post_status -- 'a' approved or 'd' for draft
APPS
app_id
app_name
app_platform -- Windows, linux, unix, etc..
APP_TO_POST -- links my posts to its relevant application
atp_id
atp_app_id
atp_post_id
我用下面的基本查询拉了一个名为“Photoshop的应用程序的所有文章其中邮政类型为'物品'且物品的状态为批准的'a':
SELECT apps.app_name, apps.app_platform, posts.post_created, posts.post_id
FROM apps
JOIN app_to_post ON app_to_post.atp_app_id = apps.app_id
JOIN posts ON app_to_post.atp_post_id = posts.post_id
WHERE apps.app_name = 'Photoshop'
AND
posts.post_type = 'Article'
AND
posts.post_status = 'a'
它得到我这些预期结果:
app_name app_platform post_created post_id
Photoshop Windows Oct. 20th, 2009 1
Photoshop Windows Dec. 1, 2009 3
Photoshop Macintosh Nov. 10th, 2009 2
会有人能够伸出援助之手,我怎么可能会改变该查询只拉每个应用平台最近的文章?因此,例如,我想我的结果是这样的:
app_name app_platform post_created post_id
Photoshop Windows Dec. 1, 2009 3
Photoshop Macintosh Nov. 10th, 2009 2
,并省略'Photoshop Windows'
文章之一,因为它不是最近的一次。
如果我简单地使用MAX(post_created)
和GROUP BY app_platform
,我的结果并不总是正确分组。从我的理解我需要执行子查询的某种内部连接?
我正在通过类似的问题,“有”的声明并没有解决它。 MySQL似乎报告了它为每个分组行找到的第一个结果,并且所有“having”将会完全排除第一个结果与最大结果不匹配的任何行。 – 2011-06-22 15:12:41