Sql выбрать отсортированную группу с ограничением - PullRequest
0 голосов
/ 05 июня 2019

У меня есть вопрос sql.Например, у меня есть таблицы с идентификатором столбца, именем, datum_event.

В моей таблице 2000 записей.

Мне нужно сделать это: отсортировать все записи по datum_event (имеет формат даты),сгруппировать все записи по имени, а затем отсортировать группы по datum_event.

Например, у меня есть выводы:

1     Name1   2019-05-06
2     Name1   2019-10-04
3     Name1   2019-08-06
4     Name2   2019-04-06
5     Name2   2019-20-04
6     Name3   2019-01-06

И мне нужно на странице показать только 2 отведения.Таким образом, для одной страницы результат:

5     Name2   2019-20-04
4     Name2   2019-04-06

Для второй страницы:

2     Name1   2019-10-04
1     Name1   2019-05-06

Для третьей страницы:

3     Name1   2019-08-06
6     Name3   2019-01-06

Можно ли сделать с MySQL?Потому что теперь я делаю это с php, и мне нужно получить все записи из таблицы (2000!), Затем зациклить все записи и создать группы, затем сортировать записи и очень-очень медленно.

Как я могу решить это?Спасибо!

1 Ответ

0 голосов
/ 05 июня 2019

Я не уверен на 100%, но я думаю, что вы ищете:

select t.*
from t
order by min(datum_event) over (partition by name),
         name,
         datum_event desc;

Возвращает имена в порядке их самого раннего события.Затем внутри имени он упорядочивается по событиям в обратном порядке.

Редактировать:

В более старых версиях MariaDB это можно выразить как:

select t.*
from t cross join
     (select name, min(datum_event) as min_datum_event
      from t
      group by name
     ) n
     on t.name = n.name
order by n.min_datum_event,
         name,
         datum_event desc;
...