这里有很多类似的问题,但我认为没有一个能充分回答这个问题。
如果可以的话,我将从当前最流行的问题继续,用他们的例子。
这个实例中的任务是获取数据库中每个作者的最新文章。
示例查询产生了不可用的结果,因为它并不总是返回的最新帖子。
SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
ORDER BY wp_posts.post_date DESC
目前公认的答案是
SELECT
wp_posts.*
FROM wp_posts
WHERE
wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
HAVING wp_posts.post_date = MAX(wp_posts.post_date) <- ONLY THE LAST POST FOR EACH AUTHOR
ORDER BY wp_posts.post_date DESC
不幸的是,这个答案显然是错误的,在许多情况下产生的结果不如原始查询稳定。
我的最佳解决方案是使用表单的子查询
SELECT wp_posts.* FROM
(
SELECT *
FROM wp_posts
ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
我的问题很简单: 有没有办法在分组之前对行进行排序而不诉诸子查询?
编辑:这个问题是另一个问题的延续,我的具体情况略有不同。您可以(也应该)假设还有一个wp_posts。Id,是该特定帖子的唯一标识符。