У меня возникли проблемы при попытке сделать какую-то бизнес-логику для клиента (веб-трейдинг):
У моего клиента есть таблица (упрощенная), подобная этой:
|| ID || OFFERED_PRODUCT_ID || DEMANDED_PRODUCT_ID ||
|| 01 || 34 || 45 ||
|| 01 || 34 || 16 ||
|| 01 || 45 || 57 ||
|| 01 || 47 || 57 ||
|| 01 || 57 || 63 ||
|| 01 || 16 || 20 ||
Теперь приложение должно отображать крупнейшую торговую цепочку, торговая цепочка определяется как отношение предлагаемых и востребованных продуктов.
Это торговые сети:
<34, 45, 57, 63> <34, 16, 20> <45, 57, 63> <47, 57, 63> <57, 63> <16, 20>
Я пытаюсь использовать C # для решения этой проблемы, но, учитывая объем данных, это стало невозможно. Мой коллега сказал, что рекомендует мне использовать рекурсию. Я пытаюсь понять, что он имеет в виду, но я разработчик на стороне клиента, не очень разбираясь в SQL.
Я сделал это:
select o.OFFERED_PRODUCT_ID, o.DEMANDED_PRODUCT_ID
from TRADES o
start with
o.DEMANDED_PRODUCT_ID = (SELECT MIN(o.DEMANDED_PRODUCT_ID) from TRADES)
connect by NOCYCLE prior o.DEMANDED_PRODUCT_ID = o.OFFERED_PRODUCT_ID;
Я пытаюсь начать рекурсию с самого старого продукта в системе (с минимальными идентификаторами). Но это не работает. Это дало мне все торговые сети. Мне нужен только самый большой.
Вот пример вывода:
OFFERED_PRODUCT_ID DEMANDED_PRODUCT_ID
9920896475501851 59587794888502550724
59587794888502550724 13197303523502765990
13197303523502765990 54010274740204405159
54010274740204405159 14505831337880766413
14505831337880766413 89607128670993987443
89607128670993987443 8802863939059413452
8802863939059413452 7779127922701247342
7779127922701247342 3810800421539873909
3810800421539873909 12423373218147473557