Как отсортировать по столбцу тип строки, но алфавит не имеет отношения к сортировке? - PullRequest
1 голос
/ 24 июня 2019

Мне нужно отсортировать для каждого столбца person_id, где приоритеты порядка:

  1. актуально: 1> 0
  2. тип: Reg> Zee = Con
  3. дата_старт: DESC

Итак, из данных:

+----+-----------+------+------------+------------+--------+
| id | person_id | type | date_start | date_end   | actual |
+----+-----------+------+------------+------------+--------+
| 1  | 1         | Reg  | 01-01-2018 | 31-01-2018 | 0      |
+----+-----------+------+------------+------------+--------+
| 2  | 1         | Con  | 01-02-2019 | 01-05-2019 | 0      |
+----+-----------+------+------------+------------+--------+
| 3  | 2         | Reg  | 01-01-2018 | 31-05-2018 | 0      |
+----+-----------+------+------------+------------+--------+
| 4  | 2         | Reg  | 01-05-2018 | 31-07-2019 | 1      |
+----+-----------+------+------------+------------+--------+
| 5  | 2         | Con  | 01-06-2018 | 31-04-2020 | 1      |
+----+-----------+------+------------+------------+--------+
| 6  | 2         | Zee  | 31-05-2019 | 31-08-2019 | 1      |
+----+-----------+------+------------+------------+--------+

Мне нужен запрос для person_id = 1, результат:

    +----+-----------+------+------------+------------+--------+
    | id | person_id | type | date_start | date_end   | actual |
    +----+-----------+------+------------+------------+--------+
    | 1  | 1         | Reg  | 01-01-2018 | 31-01-2018 | 0      |
    +----+-----------+------+------------+------------+--------+
    | 2  | 1         | Con  | 01-02-2019 | 01-05-2019 | 0      |
    +----+-----------+------+------------+------------+--------+

А для person_id = 2 результат:

+----+-----------+------+------------+------------+--------+
| id | person_id | type | date_start | date_end   | actual |
+----+-----------+------+------------+------------+--------+
| 4  | 2         | Reg  | 01-05-2018 | 31-07-2019 | 1      |
+----+-----------+------+------------+------------+--------+
| 6  | 2         | Zee  | 31-05-2019 | 31-08-2019 | 1      |
+----+-----------+------+------------+------------+--------+
| 5  | 2         | Con  | 01-06-2018 | 31-04-2020 | 1      |
+----+-----------+------+------------+------------+--------+
| 3  | 2         | Reg  | 01-01-2018 | 31-05-2018 | 0      |
+----+-----------+------+------------+------------+--------+

(Кроме того, но это дополнительный вопрос, мне нужно взять самый старый start_date из запроса, но ТОЛЬКО если между каждой строкой сохранялась непрерывность даты)

1 Ответ

1 голос
/ 24 июня 2019

Вы можете использовать выражение CASE для добавления определенных весов:

ORDER BY actual DESC, CASE WHEN `type` = 'Reg' THEN 1 ELSE 2 END, date_start DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...