在这里可以找到很多类似的问题,但是我认为没有一个人能够充分回答这个问题。
如果可以的话,我将继续从当前最流行的问题开始,并使用其示例。
本例中的任务是获取数据库中每个作者的最新帖子。
该示例查询产生不可用的结果,因为它并不总是返回最新的帖子。
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,它是该特定帖子的唯一标识符。
There are plenty of similar questions to be found on here but I don't think that any answer the question adequately.
那就是赏金的目的。
post_author
并post_date
不能获得唯一的一行,因此必须有更多的行来获得唯一的一行post_author