У меня есть таблица, содержащая поля:
History_ID ORDER_ID Previous_STATUS_ID Next_STATUS_ID
0 2 null 1
1 2 1 2
2 2 2 3
3 1 null 1
4 2 3 4
5 3 null 2
6 2 4 1
7 2 1 2
8 2 2 5
9 7 3 4
10 4 6 2
11 9 3 5
Содержит мой заказ ID
и ID
статуса. В основном таблица содержит историю STATUS
для каждого заказа.
Я хотел бы проверить, имеет ли конкретный заказ определенную последовательность заказов.
Пример: если идентификатор заказа 4 имел состояния 2,4,3,1
, вернуть true
Статусы должны быть один за другим, поэтому после 2 должно быть 4, после 4 - 3 и после 1. 1. 1016 *
Эти последовательности дают мне информацию (которая будет отображаться в моем отчете) о потоке определенного заказа.
Мне нужно проверить последовательности такого типа:
- 1,2,3
- 1,4,3,2
- 4,2
- (1 или 2 или 3 или 4), 5,3 - один из тех 4, затем 5 и затем 3
У меня нет идеи, как начать с такого запроса: /
EDIT:
Мой окончательный отчет представляет собой таблицу, содержащую информацию о заказах, например, так:
Orders type Count ...
Profile1 145 ...
Profile2 217 ...
Profile3 12 ...
Profile4 2 ...
У меня около 800 000+ заказов, и мой отчет должен составляться каждый день, поэтому вместо того, чтобы делать отчет для всей таблицы (проверяя эти STATES и агрегируя информацию из других таблиц), я решил создать таблицу отчетов:
Order_ID Profile Order_date Customer_profile ...
1 5 '2008-01-03' 2
4 1 '2009-04-10' 3
3 7 '2011-11-03' 1
4523 2 '2012-11-03' 5
Так что я могу создать ночную работу, которая будет добавлять новые заказы в эту таблицу с моей информацией, и я просто сделаю простой выбор из этой таблицы, чтобы избежать агрегирования.
Первая вставка будет большой, но следующей ночью будут добавлены только новые заказы.
Например, посмотрите на заказ с ID = 2
Next_STATUS_ID ale примерно так: 1,2,3,4,1,2,5 ... Я хочу проверить, есть ли в этом порядке изменение истории, например, 1,2,5, поэтому моя функция (оператор select) должна повторить 1, если она находит эти идентификаторы в указанном порядке.