Как отфильтровать несколько дат относительно других узлов в запросе? - PullRequest
0 голосов
/ 17 декабря 2018

В песочнице Преступное расследование Я пытаюсь найти последовательность преступлений, которые произошли в том же месте.В частности я пытаюсь найти:

"Burglary" crimes that happened after "Bicycle theft" in which the Bicycle theft happened after "Drugs" crimes.

Я могу найти первую часть достаточно легко:

MATCH p =(a:Crime{type:'Burglary'})-[:OCCURRED_AT*2]-(b:Crime{type:'Bicycle theft'})
WHERE a.date > b.date
return p LIMIT 100;

Но как бы я добавил вторую часть вопроса, а именно: "Воровство велосипедов" после преступлений "Наркотики"?

1 Ответ

0 голосов
/ 19 декабря 2018

Проблема в том, что вы сравниваете даты, сохраненные в текстовом формате, и получаете неправильный результат:

RETURN "15/08/2017" < "9/02/2017" // => true

Таким образом, ваш первый запрос также дает неверный результат.И вам нужно конвертировать date поле из текстового формата в datetime .Например:

MATCH (L:Location)
MATCH p1 = (C1:Crime {type: 'Bicycle theft'})-[:OCCURRED_AT]->(L)
MATCH p2 = (C2:Crime {type: 'Burglary'})-[:OCCURRED_AT]->(L)
MATCH p3 = (C3:Crime {type: 'Drugs'})-[:OCCURRED_AT]->(L)

WITH p1, p2, p3, C1, C2, C3,
     split(C1.date, '/') as tmp1,
     split(C2.date, '/') as tmp2,
     split(C3.date, '/') as tmp3
WITH p1, p2, p3, C1, C2, C3,
     datetime(tmp1[2] + '-' + tmp1[1] + '-' + tmp1[0]) as dt1,
     datetime(tmp2[2] + '-' + tmp2[1] + '-' + tmp2[0]) as dt2,
     datetime(tmp3[2] + '-' + tmp3[1] + '-' + tmp3[0]) as dt3
WHERE dt1 < dt2 AND 
      dt1 > dt3

RETURN p1, p2, p3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...