如何实现按ParentID分组取前一条记录值,等效SQL LAG窗口函数功能
Cypher 实现同组内取上一条记录值方案
无需使用OFFSET和MATCH混合查询,直接通过分组排序+列表索引即可实现等效SQL中LAG窗口函数的效果,具体查询语句如下(假设你的数据存储为标签为Record的节点,属性包含ParentID、ChildID、Date、Value):
MATCH (r:Record) -- 按ParentID分组,组内按日期升序生成有序记录列表 WITH r.ParentID AS parent, collect(r ORDER BY r.Date ASC) AS sortedRecords -- 遍历列表下标 UNWIND range(0, size(sortedRecords)-1) AS idx WITH sortedRecords[idx] AS current, -- 下标为0的第一条记录无上一条,返回NULL,否则取前一条的Value CASE WHEN idx > 0 THEN sortedRecords[idx-1].Value ELSE NULL END AS PreviousValue -- 按要求输出字段 RETURN current.ParentID AS ParentID, current.ChildID AS ChildID, current.Date AS Date, current.Value AS Value, PreviousValue ORDER BY ParentID, Date ASC
执行上述语句即可得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者Daimen Rees
相关产品推荐
相关产品推荐

