Проблемы с получением номера остановки с ROW_NUMBER () OVER - DB2

Я пытаюсь сообщить о деятельности. У меня есть таблица, в которой указан «номер остановки», но этот номер не имеет ничего общего с фактической остановкой, на которой происходило действие (остановка 1 прибытие / отправление, остановка 2 прибытия / отправления). Поэтому я хочу пронумеровать остановки с помощью ROW_NUMBER () ...

    select 
WH.SEGMENT_NB,
WH.STOP_NB,
ROW_NUMBER () OVER(PARTITION BY WH.SEGMENT_NB, WH.STOP_NB ORDER BY WH.STOP_NB) as Stop,
MAX(CASE WHEN WH.WORK_ACTION_TYPE_ID = 'EAA' 
    THEN WH.CREATE_TS
END) AS Actual_Arrival,
MAX(CASE WHEN WH.WORK_ACTION_TYPE_ID = 'EAD' 
    THEN WH.CREATE_TS
END) AS Actual_Departure,
WH.CREATED_BY_TX AS ENTERED_BY
    from VASDW.TNT_WORK_HISTORY WH
    join VASDW.TNT_WORK_ACTION_TYPE WA on WA.WORK_ACTION_TYPE_ID = WH.WORK_ACTION_TYPE_ID
        and WA.RECORD_DELETE_FG = 'N'
    where WH.WORK_ACTION_TYPE_ID in('EAA','EAD')
    and wh.segment_nb = 15931846
   GROUP BY WH.SEGMENT_NB, WH.STOP_NB, WH.CREATED_BY_TX
   ORDER BY WH.SEGMENT_NB, WH.STOP_NB

Я ожидал увидеть это:

   Segment_Nb     STOP_NB     STOP
    15931846       12345       1
    15931846       12345       1
    15931846       23456       2

Но он читает СТОП 1,2,1. Есть идеи, что мне нужно исправить? TIA.


person Brian Minturn    schedule 17.04.2020    source источник


Ответы (1)


Я думаю, что вы хотите:

DENSE_RANK() OVER(PARTITION BY WH.SEGMENT_NB ORDER BY WH.STOP_NB) as Stop

То есть:

  • STOP_NB не должен принадлежать разделу - вы хотите его только для заказа

  • Вы хотите, чтобы DENSE_RANK() увеличивался только при STOP_NB изменениях, без пробелов

person GMB    schedule 17.04.2020