我有以下查询,它返回移动,容器名称和容器的cicle。容器上的cicle的最大值意味着它是实际的cicle。
select des.movimiento,
des.equipo_identi,
max(des.ciclo) as ciclo
from publico.descarga des
inner join publico.prioridad_movimiento primo
on des.movimiento = primo.movimiento
group by des.movimiento, des.equipo_identi, primo.prioridad
order by primo.prioridad
它给我这个
movimiento | equipo_identi | ciclo
--------------- --------------- --------
Descarga | CBHU4329906 | 1
Descarga | CSLU1387094 | 2
Descarga | CSLU1407729 | 2
GateOut Puerto | CBHU4329906 | 1
GateOut Puerto | CSLU1387094 | 2
GateOut Puerto | CSLU1407729 | 2
GateIn Patio | CBHU4329906 | 1
GateIn Patio | CSLU1387094 | 2
GateIn Patio | CSLU1407729 | 2
我想要的是在最后一个动作( movimiento )上显示最后一个cicle( ciclo )。像这样,显示这3个不同的容器(表标题:equipo_identi ),最后一个动作是“GateIn Patio”:
movimiento | equipo_identi | ciclo
------------- --------------- --------
GateIn Patio | CBHU4329906 | 1
GateIn Patio | CSLU1387094 | 2
GateIn Patio | CSLU1407729 | 2
为此,我有下表设置我的移动优先级。
prioridad | movimiento
---------- ----------------
1 | Descarga
2 | GateOut Puerto
3 | GateIn Patio
4 | GateOut Patio
5 | GateIn Puerto
6 | Export
最高优先级为6,最小值为1.
答案 0 :(得分:0)
如果我理解正确,您只想在聚合后按优先级对结果进行排名:
select x.*
from (select des.movimiento, des.equipo_identi, max(des.ciclo) as ciclo,
rank() over (order by primo.prioridad desc) as rnk
from publico.descarga des inner join
publico.prioridad_movimiento primo
on des.movimiento = primo.movimiento
group by des.movimiento, des.equipo_identi, primo.prioridad
) x
where rnk = 1;