Как добиться приведенных ниже результатов в SQL?

#mysql #sql

Вопрос:

Задача: Просмотреть идентификатор каждого сотрудника и отсортировать по дате ЗАПРОСА. Затем создайте идентификатор типа ОЧЕРЕДИ ОТ и ДО. Поэтому я хотел бы посмотреть, из какой ОЧЕРЕДИ перешел этот сотрудник. Последняя строка QUEUE_TYPE_ID_TO должна быть пустой, так как сотрудник застрял в ОЧЕРЕДИ «ОТ».

Начните с этого: Таблица ABC

ИДЕНТИФИКАТОР СОТРУДНИКА QUEUE_TYPE_ID_FROM QUEUE_TYPE_ID_ТО REQUEST_DATE PARTION_BY_NUM
1 R366 R366 3/5/2021 1
1 R286 R366 6/5/2020 2
1 R286 R366 5/6/2018 1
1 R156 R366 2/5/2018 1

Завершите этим: Таблица XYZ

ИДЕНТИФИКАТОР СОТРУДНИКА QUEUE_TYPE_ID_FROM QUEUE_TYPE_ID_ТО REQUEST_DATE_FROM REQUEST_DATE_TO
1 R366 нулевой /5/2021 нулевой
1 R286 R366 6/5/2020 3/5/2021
1 R156 R286 2/5/2018 6/5/2020

Комментарии:

1. это называется ppivot, и если вы хотите, чтобы он был динамическим, вам нужен динамический sql, но даже в этом случае способ подключения строк должен быть в облаке, иначе вы не сможете построить отношения aa

2. Я думал сделать заявление о случае, в котором говорится, что если значение queue_type_id_from соответствует значению queue_type_id_to, то измените значение queue_type_id_to на последнее значение queue_type_id_from с последней датой. Вот почему у меня есть partition_by_num в первой таблице.

3. СЛУЧАЙ, КОГДА QUEUE_TYPE_ID_FROM = QUEUE_TYPE_ID_FROM_TO, ЗАТЕМ ЗНАЧЕНИЕ NULL (ВЫБЕРИТЕ QUEUE_TYPE_ID_FROM ИЗ ABC, ГДЕ PARTION_BY_NUM=2) ЗАВЕРШИТЕ QUEUE_TYPE_ID_TO — Это работает?

4. вы должны пересмотреть свою концепцию, чтобы найти рекурсивный CTE, или, если у вас есть более старая версия cte, вам нужно искать hirachys в mysql или rountrip, есть несколько вариантов, но, короче говоря, до сих пор gebigging должен быть maekd, и должны быть хлебные крошки, которые следуют до конца. если у вас есть несколько R286 в качестве начала, вам необходимо определить конечную точку для **каждой ** начальной точки