我有一个查询(下面),它返回包含创建日期的节点集合。我想按最新的创建日期对行进行排序。有些行有一个创建日期,其他行有几个。可以看出,节点“name4”应该是第一个。我应该对查询做出哪些更正?感谢。
MATCH (node:node)
WITH node
ORDER BY node.created DESC
RETURN count(node.name) AS count, node.name, collect(node.created) AS created
count node.name created
3 "name1" [1410234609620,1410234606534,1410234506799]
1 "name2" [1410234434936]
1 "name3" [1410234454573]
2 "name4" [1410463902552,1410460561481]
1 "name5" [1410234485185]
2 "name6" [1410234548527,1410234525740]
答案 0 :(得分:2)
假设您的时间戳在集合中正确排序,您可以使用HEAD([1, 2, 3])
从每个集合中获取第一个时间戳,这将返回集合的第一个元素。我已将此值加载到timeSort
属性中,并将其用作排序条件。
MATCH (node:node)
WITH node
ORDER BY node.created DESC
WITH count(node.name) AS count, node.name as name, collect(node.created) AS created
WITH count, name, head(created) as timeSort, created
RETURN count, name, created
ORDER BY timeSort DESC
答案 1 :(得分:2)
此查询首先找到每个名称的最大时间戳x
,然后对结果进行排序。
MATCH (node:node)
WITH node.name AS name, COLLECT(node.created) AS created
WITH name, created, REDUCE(t = 0, c IN created | CASE WHEN c > t THEN c ELSE t END) AS x
RETURN LENGTH(created) AS count, name, created
ORDER BY x DESC