Пожалуйста, смотрите изображение файла CSV. Я работаю с Cypher, Neo4j. Как вы можете видеть действия с их отметкой времени, все относятся к case_id соответственно. Многие из них принадлежат одному и тому же case_id (здесь вы видите case_id 3, 2, 1), но, пожалуйста, представьте, что есть еще много других. Я хочу сгруппировать действия, которые принадлежат одному и тому же идентификатору, и выполнять то же самое! запрос по каждой из групп (группировка имеет важное значение).
Есть ли способ сделать это, кроме как переписать один и тот же запрос для каждой группы, как это сделано здесь в три этапа?:
1
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///XY" AS row
WITH toInteger(row.case_id) AS cid, row
WHERE cid=3
CREATE (act:Activity {caseId: cid, activityName: row.activity, time: row.timestamp})
'QUERY'
2.
LOAD CSV WITH HEADERS FROM "file:///XY" AS row
WITH toInteger(row.case_id) AS cid, row
WHERE cid=2
CREATE (act:Activity {caseId: cid, activityName: row.activity, time: row.timestamp})
'QUERY'
3.
LOAD CSV WITH HEADERS FROM "file:///XY" AS row
WITH toInteger(row.case_id) AS cid, row
WHERE cid=1
CREATE (act:Activity {caseId: cid, activityName: row.activity, time:
row.timestamp})
'QUERY'
Так что, в основном, я хочу обобщить WHERE cid=3(or 2 or 1)
в смысле итерации по всем различным идентификаторам случаев без явного присвоения им имен. Немного похоже на Java for each element in array (array content: group by case_id) do QUERY
.
Есть идеи как?
Заранее спасибо, и я буду рад предоставить более подробное описание, если это звучит слишком загадочно.
Обновление:
Вот запрос:
MATCH(act: Activity)
WHERE act.caseId = 1 //and here I want to be able to simplify for EVERY caseId
WITH act ORDER BY act.time ASC
WITH apoc.coll.frequencies(apoc.coll.pairsMin(COLLECT(act.activityName))) AS g
UNWIND g AS p
RETURN*