如何在Cypher中使用复杂的嵌套查询

时间:2019-02-04 09:43:07

标签: neo4j subquery cypher with-statement

我在Cypher中有一个查询,该查询可找到特定设备的最新上次使用时间。 我要匹配数据库中所有设备的“上次时间”属性是其设备的最新属性,然后返回其ID。不幸的是,我无法创建适当的子查询。

我尝试使用with和{}的示例,但找不到任何有效的方法。

(有效的)主要批量商品:

MATCH (a:device)
MATCH (b:device)
WHERE certain filters
RETURN
CASE 
WHEN a.last_seen > MAX(b.last_seen) THEN a.last_seen 
WHEN a.last_seen < MAX(b.last_seen) THEN MAX(b.last_seen)
ELSE a.last_seen END AS lastest

然后我想做:

MATCH (d:device)
WHERE d.last_seen = lastest
RETURN d.device_id

到目前为止,我所做的一切都仅使我出现语法错误。如何嵌套批量查询?

1 个答案:

答案 0 :(得分:0)

您可以使用 MAX函数获得最新的last_seen。

然后,您可以使用它使用最新的last_seen 来获取所有设备。

这里是查询以获取last_seen的最大值,然后获取与此last_seen匹配的所有设备。

MATCH (a:device)
WHERE certain filters
WITH MAX(a.last_seen) AS latest_last_seen
MATCH (d:device)
WHERE d.last_seen = latest_last_seen
RETURN d.device_id

(用您要应用的过滤器替换某些过滤器。我认为您忘了在第二个查询中添加某些过滤器。)

  

编辑:如@InverseFalcon所建议,在属性last_seen上添加索引