MySQL: сортировка так, чтобы строки были собраны после столбца A, но группы упорядочены после наибольшего соответствующего значения в столбце B - PullRequest
0 голосов
/ 31 марта 2019

Для фиктивного примера предположим, что у меня есть база данных со следующими строками: 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.

(Объяснение приведенного выше примера: Джон Доу стоит первым, потому что он написал книгу совсем недавно. Но сразу же после этого отображаются другие его книги, отсортированные по дате публикации в обратном порядке. Затем идет Ричард Роу, потому что он второй самый последний Автор, опубликовавший книгу. И т. д.)

По сути, вместо сортировки с ORDER BY author ASC, publish-date DESC я бы хотел изменить порядок групп книг по данному автору после наибольшего значения в третьем столбце.

Я понятия не имею, как решить эту проблему в MySQL, и при этом я не знаю, как называется этот вид сортировки. Я надеюсь, что вы можете помочь мне ^^ Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Вы должны сделать заказ сначала по последней дате публикации каждого автора, а затем по убыванию даты публикации:

select b.*
from books b
order by (
  select max(publishdate)
  from books
  where author = b.author
) desc, b.publishdate desc
0 голосов
/ 31 марта 2019

Один метод является коррелированным подзапросом:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...