Hi all,
I have to filter the result of a apoc.when. When two property values are equals I need the node with the closest date only one.
The problem is that the order by limit 1 does not work
The conde:
//Codigo para sacar subgrafo entre el centro y la barra
MATCH (cen:CENTRO{name:'C0010810'})<-[r5:APLICA_DIRECTO_INCLUYE]-(rapc:RAPC)
MATCH (rapc)<-[r4:APLICA_CENTROS]-(cab:CabeceraAP)
//WHERE (COALESCE(rapc.fIniEfe,"") + COALESCE(rapc.cHoraIni,"")) <= '201909050000' <= (COALESCE(rapc.fFinEfe,"") + COALESCE(rapc.cHoraFin,""))
MATCH (cab)-[r3:APLICA_MERCANCIA_C|APLICA_MERCANCIA_D]->(rapm:RAPM)
MATCH (rapm)-[r2]->(n)
MATCH p = (b:BARRA{id:'B001014861102136'})-[r6:PERTENECE_A*..3]->(n) WITH *, relationships(p) AS rel
//OPTIONAL MATCH (b)<-[:PERTENECE_A]-(t:TALLA)
//MATCH (cab)-[:APLICA_MERCANCIA_C|APLICA_MERCANCIA_D]->(ra:RAPM)-[]->(n)
MATCH ruta = ((cab)-[:APLICA_MERCANCIA_C|APLICA_MERCANCIA_D]->(ra:RAPM)-[re]->(n))
WITH count(nodes(ruta)) as con, ra, cab, n, re
CALL apoc.when(
con > 1,
//codigo para cuando una cabecera tiene mas de un rapm, sacar el min del grupo
'WITH ra.cNivelIn as nivel, ra, cab, n, re
//cambiar la M por 8,5
CALL apoc.when(
nivel = "M",
"RETURN 8.5 as nivel",
"RETURN nivel as nivel",
{nivel:nivel}) YIELD value
WITH MIN(value.nivel) as min, cab, ra, re, n
WHERE (ra.cNivelIn) = min
// cuando hay varios con el mismo nivelIn ver el nivelEci
WITH ra, cab, re, n
WHERE ra.nivelEci = "M1"
WITH ra, cab, re, n
WHERE TYPE(re) <> "APLICA_DIRECTO_EXCLUYE|APLICA_COMB_EXCLUYE_M|APLICA_COMB_EXCLUYE_F"
WITH cab, ra, re, n
WHERE cab.dTipProm = "P"
//seach cab node with the same value on property cCarpeta
WITH cab, cab as cab1, ra, re, n
CALL apoc.when(
cab.cCarpeta = cab1.cCarpeta,
//if the nodes are equals, I use the node with the closest date
"WITH MAX(ra.fIniEfe + ra.cHoraIni) as maxFechas, cab, ra
WHERE (ra.fIniEfe + ra.cHoraIni) = maxFechas
RETURN cab, ra, maxFechas ORDER BY maxFechas DESC limit 1
",
"",
{cab:cab,ra:ra}) YIELD value as val
RETURN val
',
//codigo para cuando una cabecera tiene un solo rapm
'',
{ra:ra,cab:cab,n:n, re:re}) YIELD value
//RETURN value.cab as cab, value.ra as rapm, value.nivel, value.min, value.n as n
RETURN value.val
the detail is this:
Thanks in advance.
Regards.