返回Neo4j中的聚合柱状结果集

时间:2015-03-11 02:12:38

标签: neo4j cypher

如何在代表当天每小时的列中返回客户小时数据的汇总总和?这个问题可能有点模糊,所以我会设置上下文...

我有一组客户数据,每个客户都有一个电表,每小时读一次电表(想想你家的电表)。客户1-X被分配到组1,客户YZ被分配到组2等。我在Neo4j中设置了时间树(年 - >月 - > - 日 - >小时)和小时计读取是一个单独的节点,具有适当小时的边缘(以及客户的边缘)。我需要返回一份报告,该报告总结了每个组中所有客户的所有小时计量读数(按组),但每小时需要是一个单独的列,如下所示:

GroupName Date H1Sum H2Sum H3Sum ... H24Sum

以下查询返回报告的正确格式,但仅返回第一个小时。如何创建另外23列代表2-24小时的数据?

MATCH (Group:LMRGroup)<-[:PART_OF_GROUP]-(SubGroup:SubLMRGroup)<-[:PART_OF_GROUP]-(c:Customer)-[:HAS_METER_READ]->(HrlyMR:HourlyMeterRead)-[:METER_READ]->(hr:Hour
{hour:1})<-[:HAS_HOUR]-(d:Day {day:5})<-[HAS_DAY]-(m:Month {month:3})<-[:HAS_MONTH]-(y:Year {year:2015})
RETURN 
Group.Name as GroupName,
m.month + '-' + d.day + '-' + y.year as Date,
sum(HrlyMR.Reading) as HE1

如果这仍然是一个令人困惑的问题,感谢您的帮助和道歉。

1 个答案:

答案 0 :(得分:1)

这是一个非常有疑问的问题。我已经把它弄清楚了。

MATCH (Group:LMRGroup)<-[:PART_OF_GROUP]-
      (SubGroup:SubLMRGroup)<-[:PART_OF_GROUP]-
      (c:Customer)-[:HAS_METER_READ]->
      (HrlyMR:HourlyMeterRead)-[:METER_READ]->
      (hr:Hour)<-[:HAS_HOUR]-
      (d:Day {day:5})<-[HAS_DAY]-
      (m:Month {month:3})<-[:HAS_MONTH]-
      (y:Year {year:2015})
RETURN 
   distinct(hr.hour) as Hour, 
   Group.Name as GroupName,
   m.month + '-' + d.day + '-' + y.year as Date,
   sum(HrlyMR.Reading) as HE1;

我在(hr:Hour { hour: 1})上移除了您的参数,以便它与所有小时匹配。然后,您只需按小时1,小时2,小时3等将distinct(hr.hour)返回到组记录,依此类推。其余结果应自动聚合到适当的小时,不需要您在SQL中使用的GROUP BY语句