我在SQL中有以下查询( Oracle DB 11g XE )
仅针对上下文:此查询搜索具有最大功率因数的传感器,每个月的范围介于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 Developer向我显示正确的结果,每个月仅一行,没有重复;例如:
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 DB相同的输出?(如果可能的话,当然)
提前感谢您的帮助。
答案 0 :(得分:3)
您显示的输出中的字段与查询不对应(例如,究竟是什么是“Scored By”?)但是在Neo4j中聚合的技巧是理解聚合键是隐式的。
所以,如果你有
RETURN distinct a.meterid, max(peak_time),apoc.date.format(peak_time,'s','MM') as month
您正在分组米和月。
如果您只想按月分组,那么
RETURN max(peak_time),apoc.date.format(peak_time,'s','MM') as month
希望这有帮助!
此致 汤姆