首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SQL到Neo4j:尝试分组查询结果

从SQL到Neo4j:尝试分组查询结果
EN

Stack Overflow用户
提问于 2017-08-08 11:31:23
回答 1查看 162关注 0票数 0

我在SQL中有以下查询(OracleDB11gXE)

仅用于上下文:此查询搜索每个月具有最大功率因数的传感器,范围为0.90至0.99 )

代码语言:javascript
复制
with abc as (select extract(month from peak_time) as Month, 
max(total_power_factor) as Max_Power_Factor 
from sensors group by extract(month from peak_time) order by Month DESC) 
select abc.Month, Max_Power_Factor, meter_id as "Made by" 
from abc join sensors 
on sensors.total_power_factor = abc.Max_Power_Factor 
where Max_Power_Factor between 0.90 and 0.99
order by Max_Power_Factor;

SQL向我显示正确的结果,每个月只有一行,没有重复;例如:

代码语言:javascript
复制
Month  Max_Power_Factor Scored by
6      0.981046427565   b492b271760a
1      0.945921825336   db71ffead179
3      0.943302142482   a9c471b03587
8      0.9383185638     410bd58c8396
7      0.930911694091   fe5954a46888
5      0.912872055549   ee3c8ec29155

我的问题是试图在Neo4j上复制相同的查询(3.2.1CE,在Windows10上):我不知道如何准确地分组数据以获得相同的结果。(如您所见,我正在使用APOC管理日期)

代码语言:javascript
复制
match(a:Sensor) with a, a.peak_time as peak_time
where (a.total_power_factor > 0.90 and a.total_power_factor <0.99 )
RETURN distinct a.meterid, max(peak_time),apoc.date.format(peak_time,'s','MM') as month
order by month desc

这些是我的Cypher结果,正如您所看到的,每个月都有多行

代码语言:javascript
复制
Month   Max_Power_Factor Scored by
06      0.981046427565  b492b271760a
01      0.945921825336  db71ffead179
03      0.943302142482  a9c471b03587
08      0.9383185638    410bd58c8396
08      0.93451098613   dfd6b67cc6d6
07      0.930911694091  fe5954a46888
02      0.916440282713  649956b34e87
05      0.912872055549  ee3c8ec29155
08      0.907059974935  a3e8df8a0ba8

因此,我的问题是:如何将数据分组,以便与Oracle?具有相同的输出(当然,如果可能的话)

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 12:38:06

您显示的输出中的字段与查询不相对应(例如,“得分”到底是什么?)但是,在Neo4j中聚合的诀窍是理解聚合键是隐式的。

所以如果你有

代码语言:javascript
复制
RETURN distinct a.meterid, max(peak_time),apoc.date.format(peak_time,'s','MM') as month

您正在meterid和月份上进行分组。

如果您只想按月分组,则应该是

代码语言:javascript
复制
RETURN max(peak_time),apoc.date.format(peak_time,'s','MM') as month

希望这能帮上忙!

你好,汤姆

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45567183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档