根据Neo4j中的日期仅返回最近的节点

时间:2018-01-17 14:55:06

标签: neo4j cypher

我正在尝试为我的数据库中的每个属性返回最近的属性事务的地址,以及事务的一些细节。每个属性只能有一个地址,但每个地址可能有多个事务。所以我想要每个房产的最新交易。

此查询仅返回最近一次交易的地址

MATCH (:Property)<-[:ADDRESS_OF]-(a:Address)<-[:PROPERTY_TRANSACTION]-(p:Transaction_details)
return a.id, a.address_line_1, a.address_line_2, a.address_line_3, a.postcode, max(p.purchase_date) 
order by a.id

但如果我想包含一些像这样的交易细节

MATCH (:Property)<-[:ADDRESS_OF]-(a:Address)<-[:PROPERTY_TRANSACTION]-(td:Transaction_details)
return a.id, a.address_line_1, a.address_line_2, a.address_line_3, a.postcode, max(td.purchase_date), td.purchase_price, td.lease_type 
order by a.id

我获得了为每个地址返回的所有交易。

有没有办法返回最近一次交易的交易详情,以及地址详情?

2 个答案:

答案 0 :(得分:1)

您可以获取给定属性的最新purchase_date,然后将其用作以下查询中的参数:

MATCH (:Poperty{id:"abc123"})<-[:ADDRESS_OF]-(:Address)<-[:PROPERTY_TRANSACTION]-(td:Transaction_details)
// get the most recent purchase_date
WITH max(td.purchase_date) AS purchase_date

MATCH (:Poperty{id:"abc123"})<-[:ADDRESS_OF]-(a:Address)<-[:PROPERTY_TRANSACTION]-(td:Transaction_details {purchase_date : purchase_date})
return a.id, a.address_line_1, a.address_line_2, a.address_line_3, a.postcode, td.purchase_date, td.purchase_price, td.lease_type 
order by a.id

答案 1 :(得分:1)

这个简单的查询应该会为您提供上次购买的信息:

jmp $

查询通过降序IP对结果进行排序,并返回一个结果行(最新日期)。

顺便说一句,我使用了标签MATCH (:Property{id:"abc123"})<-[:ADDRESS_OF]-(a:Address)<-[:PROPERTY_TRANSACTION]-(p:Transaction_details) RETURN a.id, a.address_line_1, a.address_line_2, a.address_line_3, a.postcode, p.purchase_date, p.purchase_price, p.lease_type ORDER BY p.purchase_date DESC LIMIT 1; 而不是purchase_date,这似乎是一个错字。

相关问题