You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在年份非节点属性时计算最新工作地点的任职年限?

计算最新工作地点的任职年限

首先是你提供的Cypher创建代码:

MATCH (c1:City),(c2:City)
WHERE c1.name= 'London' AND c2.name = 'Luton'
CREATE (c2)<-[:LIVING_IN {date_of_start: 2019}]-(p:Person {name: 'Mark'});

MATCH (c1:City),(p:Person)
WHERE c1.name= 'Luton' AND p.name = 'Mark'
CREATE (p)-[:WORKING_IN {date_of_start: 2019, date_of_end: 2021}]->(c1);

MATCH (c1:City),(p:Person)
WHERE c1.name= 'London' AND p.name = 'Mark'
CREATE (p)-[:WORKING_IN {date_of_start: 2022}]->(c1);

上述代码定义了Mark的居住与工作关系:他2019年开始居住在卢顿,2019-2021年间在卢顿工作,2022年起至今在伦敦工作(该工作关系无结束日期date_of_end)。接下来给出在年份不属于节点属性的前提下,计算他在最新工作地点任职年限的方案:


实现思路

核心逻辑分为三步:

  • 匹配目标人物的所有WORKING_IN工作关系
  • 筛选最新工作关系:优先选择无date_of_end的当前在职关系;若所有关系都已结束,则取date_of_start最大的那条
  • 计算任职年限:有结束日期则用结束年份减开始年份;无结束日期则用当前年份减开始年份

具体Cypher查询

MATCH (p:Person {name: 'Mark'})-[w:WORKING_IN]->(c:City)
WITH p, c, w,
     // 确定工作结束年份:有date_of_end则用该值,否则取当前系统年份
     COALESCE(w.date_of_end, date().year) AS end_year
// 按工作开始年份倒序,取最新的一条关系
ORDER BY w.date_of_start DESC
LIMIT 1
// 计算并返回结果
RETURN p.name AS person_name,
       c.name AS latest_work_city,
       w.date_of_start AS start_year,
       end_year AS end_year,
       end_year - w.date_of_start AS tenure_years

代码说明

  • COALESCE(w.date_of_end, date().year):COALESCE函数会返回第一个非空参数值,完美适配“在职/已离职”两种场景
  • ORDER BY w.date_of_start DESC LIMIT 1:通过倒序排序+限制条数,精准定位最新的工作关系
  • 最终通过年份差计算出任职年限,结果清晰直观

如果需要适配任意人物,只需修改Person节点的匹配条件(比如去掉name: 'Mark',改为传入参数)即可。


内容的提问来源于stack exchange,提问作者TenTonBonton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:53:21