举个虚拟的例子,假设我有一个数据库,其中包含以下行:book
,author
(=列A),publish-date
(=列B)。
现在,我想对书籍进行排序,以使作者将行合并在一起,但是作者的出现顺序必须是使最近出版的作者排在第一位。对于每位作者,都必须按出版日期对书籍进行分类。
我想要的输出示例:
BOOK AUTHOR PUBLISH-DATE # COMMENT
some book John Doe 2019 # most recent book => John Doe is first
another book John Doe 2017
one more John Doe 2011
again a book Richard Roe 2016 # Richard Roe is second because this is the most recent book amongst the remaining ones.
and one more Richard Roe 2008
another one Janie Doe 2013 # and so on.
(上述示例的说明:John Doe排名第一是因为他最近写过一本书。但是之后他的其他书籍将立即显示,按出版日期以相反的顺序进行排序。RichardRoe则是因为他是第二最新的出版过一本书的作者。依此类推。)
基本上,我不想用ORDER BY author ASC, publish-date DESC
进行排序,而是想对给定作者在第三列中的最大值之后的书组进行重新排序。
我不知道如何在MySQL中解决此问题,也不知道如何调用这种排序。希望您能帮帮我^^预先感谢!
答案 0 :(得分:0)
一种方法是相关子查询:
select t.*
from t
order by (select max(t2.publish_date)
from t t2
where t2.author = t.author
);
MySQL 8+(和标准SQL)使用窗口函数的方法要简单得多:
select t.*
from t
order by max(publish_date) over (partition by author)
答案 1 :(得分:0)
您必须先按每个作者的最新发布日期排序,然后再按发布日期降序排列:
select b.*
from books b
order by (
select max(publishdate)
from books
where author = b.author
) desc, b.publishdate desc