Эмулировать оконную функцию SQL в Neo4j - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующий запрос для получения 2 лучших статей (с точки зрения количества ссылок) каждого исследования для исследователей:

MATCH (p:Paper)-[:SUBMITTED_TO]->(a:Proceeding),(p)-[:CITED_BY]->()
WITH p.paperTitle as Paper, size((p)-[:CITED_BY]->()) as numCitations, 
collect(distinct a.proceedingName) as Proceedings
UNWIND Proceedings AS Proceeding
WITH Paper, numCitations, Proceeding
ORDER BY Paper, numCitations, Proceeding
RETURN Paper, numCitations, collect(Proceeding) as Proceedings
ORDER BY Proceedings, numCitations DESC

Вывод, который я получаю из этого:

Paper      numCitations     Proceedings
Title1     4                Proc1
Title2     3                Proc1
Title3     2                Proc1
Title4     7                Proc2
Title5     5                Proc2
Title6     3                Proc2
Title7     8                Proc3
Title8     4                Proc3
Title9     2                Proc3

То, что я хочу сделать сейчас, - это получить только 2 верхних из всех документов, которые появляются для каждого процесса (три для всех), но если я использую LIMIT 2 в концеиз запроса, я получаю только 2 верхних из всех (не для каждого процесса):

Paper      numCitations     Proceedings
Title7     8                Proc3
Title4     7                Proc2

Обратите внимание, что Proc1 был полностью отброшен.Это не то, что я ищу.Любые идеи о том, как сделать это в Neo4j?

Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Вот запрос, который я использую в генеалогии, чтобы вытащить двух старших детей из группы мужчин (идентифицируемых по их RN):

match (p:Person)<-[:father]-(c:Person) where p.RN in [5,7,27]
with p, c order by c.BD
with p.RN as RN,collect(c.fullname) as cC
return RN,cC[0..2]

По аналогии, вы можете отсортировать ваши данные по numCitations(а не дата рождения), а затем ограничить результат до 2.

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