在neo4j中模拟窗口SQL函数



我有以下查询来检索每个研究人员的前两篇论文(根据引用数量):

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

我现在想做的是仅获取每个程序出现的所有论文的前两项(所有这些论文)查询,我只获得了所有内容的前两个(不是每个程序):

Paper      numCitations     Proceedings
Title7     8                Proc3
Title4     7                Proc2

请注意,Proc1被完全丢弃。这不是我想要的。关于如何在neo4j中执行此操作的想法?

谢谢!

这是我在家谱中使用的查询,以拔出一组男人的两个最大的孩子(由他们的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]

通过类比,您可以按数字(而不是出生日期)对数据进行排序,然后将结果限制为2。

最新更新