【问题标题】:Neo4j - Cypher query for finding all the next nodes and relationship based on timestampNeo4j - 基于时间戳查找所有下一个节点和关系的 Cypher 查询
【发布时间】:2017-10-23 11:04:05
【问题描述】:

我在 Neo4j 中有下图。在下图中Subscriber 是在不同时间执行不同操作的实体。动作是图中的关系(ComplainedRechargedEnquiredClicked)。

我的要求是编写 Cypher 查询以获取所有 Subscriber 的所有下一个操作(例如:我希望查询找到所有完成 RechargedSubscriber 执行的下一个操作是什么使用RechargeType=TT 进行操作。我需要根据时间(ActionTime)获取下一个操作

我还提供了在编写以下查询后返回的 .xls 中获取图表的全部数据的链接。

Graph Data

match(n)-[r]->(k)
return n, r, type(r), k

下面的查询返回所有 RechargeType='TT' 的订阅者的详细信息。我需要的是密码查询,以根据“ActionTime”获取这些订阅者立即采取的下一步行动,并根据所采取的行动(充值、点击、投诉、查询)对它们进行分组。

查询: match(n:Subscriber)-[r:Recharged]->(k) 其中 r.RechargeType='TT' 返回 n, r, type(r), k;

如果需要任何进一步的细节/解释来回答我的问题,请告诉我..

编辑:图形数据已被修改,使得执行的所有操作(在本例中为关系)的操作时间相同,并且修改后的图形图像已上传。

Graph

【问题讨论】:

  • 你的意思是“根据时间获取下一个动作(例如RechargeTime,CallTime))”?另外,到目前为止,您尝试过什么?谢谢!
  • 我的意思是询问订阅者执行的下一个操作,并根据执行的操作(关系)对其进行分组。需要使用关系的“时间”属性(例如,CallTime、RechargeTime)找到立即的下一个动作。请参考附图。
  • 是否不可行将所有时间属性重命名为Time 而不是RechargeTimeCallTime 等?我认为这可以简化您的查询...此外,“操作类型”存储在关系中(已充电、已单击等)。
  • @BrunoPeres 是的,同意,如果重命名所有“时间”属性将简化查询。因此,让我们假设所有时间属性为“时间”。 Recharged、Clicked 等是关系类型,我不会将其存储在关系中,如果需要,我也可以这样做。我是 Neo4j 的新手,所以不确定最好的方法。让我知道我是否需要存储动作类型,如果是,那么满足我要求的查询将是什么。谢谢!!
  • @BrunoPeres 根据您的建议编辑了问题。对方法和查询有任何想法。

标签: neo4j cypher


【解决方案1】:

以下查询是我的问题的答案。

MATCH (n) with n, collect(n.msisdn) as list 
Match (n) WHERE n.msisdn IN list
MATCH (n)-[r]->(k) WHERE r.ActionType='TT'
WITH n, MIN(r.ActionTime) as min
MATCH (n)-[rout]->() WHERE rout.ActionTime > min
WITH n, rout
ORDER BY rout.ActionTime
WITH n, COLLECT(rout)[0] AS r
RETURN {
node: n,
outgoing:
  { relationship: TYPE(r), 
    node: ENDNODE(r),
    rType: r.ActionType,
    rTime: r.ActionTime,
    rChannel: r.ContactChannel
  }
  } AS result;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多