Limitar al último movimiento de acuerdo 2 Кампуса

Tengo una tabla llamada descarga, dicha представляют меня в виде таблицы Гуарда es el historial de movimientos de los contenedores bajo Эль-Кампо equipo_identi, para diferenciar que el contenedor никакой se repita, se agregó бразильская саванна ООН llamado сабля параграфа трехколесного такси cuantas недостатки el contenedor ха llegado al pais. Запрос Tengo el siguiente, que я muestra los últimos movimientos del contenedor bajo el ciclo máximo:

select x.*
from (select des.movimiento, des.equipo_identi, des.status, max(des.ciclo) as ciclo,
        rank() over (order by des.ciclo desc) as rank,
        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, des.status, des.ciclo, primo.prioridad
     ) x
where rank = 1;

Y меня devuelve, Комо se наблюдает, es todos Лос movimientos de (en este caso 2 contenedores) трехколесное такси los contenedores en su máximo (en este caso 2):

movimiento   | equipo_identi | status | ciclo | rank | rnk
---------------------------------------------------------
Export       | CSLU1407729   | Full   | 2     |   1  | 1
GateIn Puerto| CSLU1387094   | Empty  | 2     |   1  | 4
GateIn Puerto| CSLU1407729   | Empty  | 2     |   1  | 4
GateOut Patio| CSLU1387094   | Empty  | 2     |   1  | 8
GateOut Patio| CSLU1407729   | Empty  | 2     |   1  | 8
GateIn Patio | CSLU1387094   | Empty  | 2     |   1  | 12
GateIn Patio | CSLU1407729   | Empty  | 2     |   1  | 12

Pero necesito соло ver el último movimiento según equipo_identi, bajo esto por eso танго en мой запрос, макс. (des.ciclo), сабля параграфа es su último трехколесное такси y никакое todos Лос трехколесное такси que haya tenido el mismo, es decir:

    movimiento   | equipo_identi | status | ciclo | rank | rnk
    ---------------------------------------------------------
    Export       | CSLU1407729   | Full   | 2     |   1  | 1
    GateIn Puerto| CSLU1387094   | Empty  | 2     |   1  | 4

Детерминатив параграфа el último movimiento, танго la таблица llamada prioridad_movimiento que tiene los campos prioridad y movimiento.

prioridad | movimiento
---------- ----------------
1         | Descarga
2         | GateOut Puerto
3         | GateIn Patio
4         | GateOut Patio
5         | GateIn Puerto
6         | Export

Ми Экспорта Siendo бразильская саванна último movimiento y Descarga el primer movimiento que tiene que pasar cada "equipo_identi"

1
задан 23.03.2017, 21:16
2 ответа

Просто ты нуждаешься в том, чтобы добавить дополнительный condici¦n в rank() OVER(). Протестируй следующее:

select x.*
from (select des.movimiento, des.equipo_identi, des.status, max(des.ciclo) as ciclo,
        rank() over (partition by des.equipo_identi order by des.ciclo desc, primo.prioridad desc) as rank,
        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, des.status, des.ciclo, primo.prioridad
     ) x
where rank = 1;
2
ответ дан 24.11.2019, 10:25
  • 1
    Он продолжает показывать мне все поля добавляя partition by как покажи первую таблицу в моем вопросе – Jorge 23.03.2017, 20:57
  • 2
    Так как это, потому что @sstan он имеет razó n. Có mo definel ú ltimo движение? – Lamak 23.03.2017, 20:58
  • 3
    уже actualicé мой ответ – Lamak 23.03.2017, 21:01
  • 4
    Добавляя order by первенства он показывает меня - ú ltimo движение ' Export' equipo_identi , но предыдущего цикла. – Jorge 23.03.2017, 21:06
  • 5
    @Jorge Тогда кружи условия ORDER BY, уже cambié n в ответе. Но pró xima раз serí в хороший, что ты добавил все условия с начала в вопросе – Lamak 23.03.2017, 21:08

Сейчас, когда в конце концов digerà - вопрос, я замечаю две вещи:

  1. Я Соглашаюсь с ответом Lamak относительно изменений в rank() OVER().
  2. Есть некие элементы консультации, которые не нуждаются в том, чтобы быть allÃ, - и что добавляют confusi¦n.

В особенности, ты не нуждаешься в том, чтобы не сделать ни один GROUP BY, ни один MAX(des.ciclo), и также не нуждаешься в колонне rnk.

Из способа, который, чтобы escribir¦ ограничивается в цель твоей консультации, меня - в таким образом:

select x.*
from (select des.movimiento, des.equipo_identi, des.status, des.ciclo,
        rank() over (partition by des.equipo_identi order by des.ciclo desc, primo.prioridad desc) as rank
      from publico.descarga des 
      inner join publico.prioridad_movimiento primo 
           on des.movimiento = primo.movimiento
     ) x
where rank = 1;
0
ответ дан 24.11.2019, 10:25

Теги

Похожие вопросы