Neo4j 在橄榄球联赛中获得最多的连续胜利

Neo4j 在橄榄球联赛中获得最多的连续胜利,neo4j,Neo4j,假设橄榄球联赛结果由此类数据给出: Date, Round, Home Team, Visitor Team, Result 18/10/2018, 1, ABC, XYZ, 30-20 18/10/2018, 1, PQR, ABC, 13-12 有人能解释一下如何对上述数据进行建模以找出连续获胜最多的团队吗?[更新] 如果我们修改CSV数据的格式,使其更易于导入,方法是修剪多余的空白,并更改为更标准的日期格式,例如,进行一些额外的更改,使示例更有趣: Date,Round,Home Tea

假设橄榄球联赛结果由此类数据给出:

Date, Round, Home Team, Visitor Team, Result
18/10/2018, 1, ABC, XYZ, 30-20
18/10/2018, 1, PQR, ABC, 13-12
有人能解释一下如何对上述数据进行建模以找出连续获胜最多的团队吗?

[更新]

如果我们修改CSV数据的格式,使其更易于导入,方法是修剪多余的空白,并更改为更标准的日期格式,例如,进行一些额外的更改,使示例更有趣:

Date,Round,Home Team,Visitor Team,Result
2018-10-18,1,ABC,XYZ,30-20
2018-10-18,2,ABC,PQR,28-12
2018-10-19,1,PQR,ABC,13-12
然后我们可以导入数据,就像使用此合并而不是创建一样,以避免创建重复的团队节点:


注意:鉴于CASE子句的复杂性,如果您真的打算使用它,您应该使用所有可能的边缘情况来测试上述查询。

请您进一步解释答案CQL?谢谢。它真的还需要“max”变量吗?为什么不能只使用变量“c”?例:如果前一场比赛输了,则计算c,因为一支球队可以有一系列的胜利,然后是输/平,然后是另一系列的胜利,依此类推,因此需要将“c”重置为“0”。任何序列都可能是最长的。如果不跟踪找到的最大值,您的结果将不恰当地总是返回最后一个胜利序列的长度。
LOAD CSV WITH HEADERS FROM 'file:///data.csv' AS row
WITH row, SPLIT(row.Result, '-') AS scores
MERGE (h:Team {name: row.`Home Team`})
MERGE (v:Team {name: row.`Visitor Team`})
CREATE (h)<-[:HOME_TEAM {score: scores[0]}]-(g:Game {date: DATE(row.Date), round: row.Round})-[:AWAY_TEAM {score: scores[1]}]->(v)
MATCH (t:Team)<-[r]-(g:Game)-[r2]->(t2)
WITH t, r.score > r2.score AS isWin ORDER BY g.date, g.round
RETURN t, REDUCE(s = {max: 0, c: 0, prev:false}, w IN COLLECT(isWin) |
  CASE WHEN w
    THEN {
      c: CASE WHEN s.prev THEN s.c+1 ELSE 1 END,
      max: CASE WHEN s.max <= s.c
             THEN CASE WHEN s.prev
               THEN s.c+1
               ELSE CASE WHEN s.max = 0 THEN 1 ELSE s.max END END
             ELSE s.max END,
      prev: w}
    ELSE {c: 0, max: s.max, prev: w} END).max AS maxConsecutiveWins
ORDER BY maxConsecutiveWins DESC
LIMIT 1;
╒══════════════╤════════════════════╕
│"t"           │"maxConsecutiveWins"│
╞══════════════╪════════════════════╡
│{"name":"ABC"}│2                   │
└──────────────┴────────────────────┘