Neo4j Cypher对系列进行排序

时间:2014-09-11 20:19:03

标签: neo4j cypher

我有一个查询(下面),它返回包含创建日期的节点集合。我想按最新的创建日期对行进行排序。有些行有一个创建日期,其他行有几个。可以看出,节点“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]

2 个答案:

答案 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