У меня есть график, который выглядит так -
customer-hasOrder->order
order-hasLineItem->orderLineItem
orderLineItem-hasService->service
orderLineItem-providedOn->providedOnDate
orderLineItem-providedBy->vendor
Мне нужно определить, была ли конкретная услуга, скажем, услуга с именем «А», предоставлена какому-либо клиенту в какую-то дату без другой услуги, скажем, услуги с именем «Б», которая также предоставляется в тот же день тем же поставщиком. Это должно быть верно независимо от того, сколько заказов было отправлено клиентом в данный день. Другими словами, услуга «А» всегда должна предоставляться в тот же день, что и услуга «Б», одним и тем же поставщиком каждый раз, когда клиент заказывает «А».
Вот что мне нужно, чтобы найти клиентов, у которых в один и тот же день было "А", но не "Б" -
START
s1 = node:service(id="A"),
s2 = node:service(id = "B"),
MATCH
customer-[:hasOrder]->(o1)-[:hasLineItem]->li1-[:hasService]->s1,
customer-[:hasOrder]->(o2)-[:hasLineItem]->li2-[r?:hasService]->s2,
ol1-[:providedBy]->p1,
ol2-[:providedBy]->p2,
ol1-[:providedOn]->d1,
ol2-[:providedOn]->d2
WHERE
d1 = d2 AND p1 = p2 AND r is null
RETURN customer
Я решил прийти сюда после того, как у меня пошла кровь из носа, пытаясь выяснить, какой запрос Cypher для этого.