2017-08-08 21 views
0

我在SQL下面的查询(Oracle数据库11克XE从SQL到的Neo4j:试图组查询结果

仅适用于上下文:此查询搜索与最大功率因数的传感器,在0.90到0.99之间的范围内,每月)

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开发人员告诉我正确的结果,只有每个月一线,没有重复;例如:

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.1 CE,在Windows 10):我不知道如何在数据组中以有相同的结果。 (正如你可以看到我使用APOC管理日期)

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支架的结果,正如你所看到的,有每月多行。

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数据库中的数据?(如果可能,当然)

在此先感谢您的帮助。

回答

3

您显示的输出中的字段与查询不符(例如,究竟是“Scored By”?),但在Neo4j中聚合的技巧是理解聚合键是隐含的。

所以,如果你有

RETURN distinct a.meterid, max(peak_time),apoc.date.format(peak_time,'s','MM') as month 

你上进行分组meterid和月

如果你想在本月组只应该

RETURN max(peak_time),apoc.date.format(peak_time,'s','MM') as month 

希望这有助于!

问候, 汤姆

+0

是的,我做了一个有点混乱这里发布数据的名称,但非常感谢你,你的解决方案是完美的!再次感谢! –