MySQL:进行排序,以使行在A列之后汇聚在一起,但各组在B列中的最大对应值之后排列

时间:2019-03-30 21:55:13

标签: mysql sql

举个虚拟的例子,假设我有一个数据库,其中包含以下行:bookauthor(=列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中解决此问题,也不知道如何调用这种排序。希望您能帮帮我^^预先感谢!

2 个答案:

答案 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