Я хочу иметь возможность проследить в обратном направлении по таблице движения материалов, оборудованию, используемому для его перемещения, а также по времени, начиная с определенного значения в поле и находя это значение в другом поле в другой строке (строках) на основе общая ценность.
В приведенной ниже таблице мне нужно иметь возможность проследить, например, от EndCode 'M' все связанные строки вплоть до StartCode A. Затем я мог бы захотеть отследить все строки из EndCode 'U' обратно в StartCode 'N'.
В таблице StartCode (материал) A и B перемещаются, чтобы стать EndCode C. Затем EndCode C становится StartCodeD, затем перемещается вместе с StartCode E, чтобы стать EndCode F и т. Д. Оранжевые / синие строки представляют группы движений материала.
Исходя из этого, я хочу создать новую таблицу / представление, которое отображает время StartedAt следующего события в качестве нового поля с именем 'EndedAt'. Это будет выглядеть так:
Я создал рекурсивный запрос, который использует ROW_NUMBER и CTE для передачи через StartedAt в качестве нового поля "EndedAt".
Затем я попытался использовать вложенную инструкцию SELECT, чтобы найти все StartCodes, связанные с EndCode 'M', в попытке выполнить обратную петлю по таблице для поиска всех соответствующих EndCodes в столбце StartCode. Это приносит только несколько строк. Я повторяю, что несколько раз повторяет вложенное выражение, которое переносит его в разные строки.
Мне нужна помощь, чтобы подобрать все соответствующие начальные / конечные коды, необходимые для создания желаемой таблицы / представления.
Со временем к таблице будет прикреплен отчет, позволяющий фильтровать таблицу по выбранному параметру EndCode (например, M, U и т. Д.)
CREATE TABLE MyTable (
`StartCode` VARCHAR(1),
`StartedAt` DATETIME,
`EndCode` VARCHAR(1)
);
INSERT INTO MyTable (`StartCode`, `StartedAt`, `EndCode`)
VALUES
('A', '01/01/2019 01:00', 'C'),
('B', '01/01/2019 02:15', 'C'),
('C', '01/01/2019 03:00', 'F'),
('D', '01/01/2019 03:19', 'F'),
('E', '01/01/2019 04:00', 'F'),
('F', '01/01/2019 04:14', 'G'),
('G', '01/01/2019 05:00', 'J'),
('H', '01/01/2019 05:37', 'J'),
('I', '01/01/2019 05:45', 'J'),
('J', '01/01/2019 06:00', 'L'),
('K', '01/01/2019 06:09', 'L'),
('L', '01/01/2019 07:00', 'M'),
('N', '01/01/2019 09:20', 'P'),
('O', '01/01/2019 09:37', 'P'),
('P', '01/01/2019 09:45', 'Q'),
('Q', '01/01/2019 11:00', 'T'),
('R', '01/01/2019 11:10', 'T'),
('S', '01/01/2019 11:47', 'T'),
('T', '01/01/2019 11:58', 'U');