鉴于数据:
Adam
在Honda Civic
2006
Adam
在Bowling Ball
2008
Adam
在Tennis Racket
2010
Adam
在Toyota Camry
2013
Adam
在Hiking Shoes
2015
我希望能够查询任何给定的时间,看看亚当购买的最后一款运动器材和汽车。 THING
个节点具有type
属性(car
,sporting equipment
等。)
这有效......
MATCH (person:Person {name: {name})
OPTIONAL MATCH (person)-[bought:BOUGHT]-(thing:THING)
WHERE bought.date <= {date}
RETURN *
ORDER BY thing.date DESC
...但它会返回他在指定日期之前购买的所有东西。我可以在我的应用程序中抓取每个type
的第一行,但这是一个人为的例子,实际上我的实际应用程序在老化之前可以看到数千个这样的条目。
如果我放......
LIMIT 1
...最后,我只得到最后一次购买THING
(而不是每种类型的最后一个)。
如何构建一个能为我提供类似内容的查询:
查询:告诉我Adam
以及他在2011
时购买的最后一件事情?
响应:
person | bought | thing
{name: 'Adam', age: 38} | {date: 2010} | {type: 'sporting equipment', name: 'Tennis Racket'}
{name: 'Adam', age: 38} | {date: 2006} | {type: 'car', name: 'Honda Civic'}
答案 0 :(得分:2)
您可以按thing.type
汇总:
MATCH (person:Person {name: {name}})
OPTIONAL MATCH (person)-[bought:BOUGHT]-(thing:THING)
WHERE bought.date <= {date}
WITH person,
thing,
bought ORDER by bought.date DESC
WITH person,
thing.type as type,
HEAD(collect([thing, bought])) as tmp
RETURN person,
tmp[1] as bought,
tmp[0] as thing